私のクライアントの逆SSHトンネルを確立するためにupstartを使用しようとしています。私は多くの顧客を持っており、時々オンラインとオフラインに行きます。これが今持っているものですが、envセクションがコマンドの実行をサポートしていないため、機能しません。
description "Upstart Script to run sonarr as a service on Ubuntu/Debian based systems"
start on runlevel [2345]
stop on runlevel [016]
env PORT=$(curl http://ipvr.japayton.com/port.php)
env API=(sudo cat /home/kodi/IPVR/api)
respawn
exec autossh -nNT -i /home/root/.ssh/sshkeys -o ServerAliveInterval=15 -R $PORT:localhost:443 [email protected]
post-start exec ssh [email protected] 'sqlite3 /home/client/clients.db "UPDATE clients SET port = '$PORT' WHERE api = $API;"'
APIとリリース後はそれほど重要ではありません。 SSHを使用する代わりに、これらの更新用のAPIを構築すると思いますので、それを外部スクリプトに配置できます。 port.php は、リバーストンネルに使用可能なポートを返します。
autosshを実行するときにこのポートが必要です。スクリプトセクションを作成して通常の変数に設定できることを知っていますが、upstartはautosshのPIDの代わりにカールを監視します。外部bashスクリプトを使用するのがうまくいくかどうかわかりません。ファイルシステムに何も書きたくないです。
答え1
私はそうは思わない。これらのほとんどは独自のスクリプトに分割することができます。
description "Upstart Script to run sonarr as a service on Ubuntu/Debian based systems"
start on runlevel [2345]
stop on runlevel [016]
exec /usr/local/sbin/sonarr
そして/usr/local/sbin/sonarr
:
#!/bin/sh
PORT=$(curl http://ipvr.japayton.com/port.php)
API=$(cat /home/kodi/IPVR/api)
# Do this first because it's non-blocking
# And take care with quotes.
ssh [email protected] 'sqlite3 /home/client/clients.db "UPDATE clients SET port = '"'$PORT'"' WHERE api = '"'$API'"';"'
autossh -nNT -i /home/root/.ssh/sshkeys -o ServerAliveInterval=15 -R $PORT:localhost:443 [email protected]
このスクリプトには構文の問題がいくつかあるため、Upstartが起動していないと非難する前にスクリプトが実行されていることを確認してください。