
我正在嘗試使用 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 和啟動後並不是那麼重要。我可以將其放入外部腳本中,因為我想我將為這些更新建立 API,而不是使用 ssh。 port.php 傳回反向隧道的可用連接埠。
我在執行 autossh 時需要該連接埠。我知道我可以製作一個腳本節並將其設定為常規變量,但暴發戶會監視curl而不是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 未啟動該腳本之前,請確保腳本已運行。