
私は upstart を使用してクライアントへのリバース SSH トンネルを作成しようとしています。クライアントは多数あり、明らかにオンラインになったりオフラインになったりします。これが現在の状態ですが、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 と post-start はそれほど重要ではありません。ssh を使用するのではなく、これらの更新用の API を構築するつもりなので、これを外部スクリプトに組み込むことができます。port.php は、リバース トンネルに使用可能なポートを返します。
autossh の実行時にそのポートが必要です。スクリプト スタンザを作成して通常の変数のように設定できることはわかっていますが、upstart は autossh ではなく curl の 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 のせいにする前に、スクリプトが実行できることを確認してください。