вытесняющая переменная окружения из команды

Я пытаюсь сделать обратные ssh-туннели для своих клиентов, используя выскочку. У меня много клиентов, и они, очевидно, часто бывают и выключены. Это то, что у меня есть сейчас, но это не сработает, потому что env stanza не поддерживает запуск команды.

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 tunnel@ipvr.japayton.com post-start exec ssh tunnel@ipvr.japayton.com 'sqlite3 /home/client/clients.db "UPDATE clients SET port = '$PORT' WHERE api = $API;"' 

API и пост-старт не так важны. Я могу поместить это в внешний скрипт, так как я думаю, что собираюсь создать API для этих обновлений, а не использовать ssh. Port.php возвращает доступный порт для обратного туннеля.

Мне нужен этот порт во время выполнения autossh. Я знаю, что могу создать строфа скрипта и установить его как обычную переменную, но выскочка будет контролировать PID curl вместо autossh. Я не знаю, будет ли работать с внешним скриптом bash. Я хочу избегать писать что-либо в файловую систему.

Я так не думаю. Похоже, что большая часть этого может (или должна) быть разбита на свой собственный сценарий, так что ваш выскочка выглядит так:

 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 tunnel@ipvr.japayton.com '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 tunnel@ipvr.japayton.com 

Обратите внимание, что в скрипте было несколько проблем с синтаксисом, поэтому убедитесь, что вы запустили это, прежде чем начинать обвинять Upstart в том, что он не запускает его.