iniciar variável ambiental do comando

iniciar variável ambiental do comando

Estou tentando fazer túneis SSH reversos para meus clientes usando o upstart. Tenho muitos clientes e eles obviamente entram e saem da linha às vezes. Isto é o que tenho agora, mas não funcionará porque a sub-rotina env não suporta a execução do comando.

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;"'

A API e o pós-início não são tão importantes. Posso colocar isso em um script externo, pois acho que vou construir uma API para essas atualizações em vez de usar ssh. O port.php retorna uma porta disponível para o túnel reverso.

Preciso dessa porta na hora da execução do autossh. Eu sei que poderia criar uma estrofe de script e defini-la como uma variável regular, mas o iniciante monitoraria o PID do curl em vez do autossh. Não sei se usar um script bash externo funcionaria. Quero evitar gravar qualquer coisa no sistema de arquivos.

Responder1

Eu não acho. Parece que a maior parte disso poderia (ou deveria) ser dividida em seu próprio script para que seu iniciante se parecesse com:

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

E /usr/local/sbin/sonarrsendo:

#!/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]

Observe que houve alguns problemas de sintaxe com o script, portanto, certifique-se de executá-lo antes de começar a culpar o Upstart por não iniciá-lo.

informação relacionada