
Я пытаюсь сделать обратные туннели 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 и пост-старт не так уж важны. Я могу поместить это во внешний скрипт, так как думаю, что собираюсь создать API для этих обновлений, а не использовать ssh. Port.php возвращает доступный порт для обратного туннеля.
Мне нужен этот порт во время выполнения autossh. Я знаю, что могу сделать строку скрипта и установить ее как обычную переменную, но upstart будет отслеживать PID curl вместо autossh. Я не знаю, сработает ли использование внешнего скрипта bash. Я хочу избежать записи чего-либо в файловую систему.
решение1
Я так не думаю. Похоже, что большую часть этого можно (или нужно) вынести в отдельный сценарий, так что ваш upstart выглядит так:
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 в том, что он не запускается.