variable ambiental advenediza del comando

variable ambiental advenediza del comando

Estoy intentando crear túneles ssh inversos para mis clientes utilizando advenedizo. Tengo muchos clientes y, obviamente, a veces se conectan y desconectan. Esto es lo que tengo ahora, pero no funcionará porque la sección env no admite la ejecución del 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;"'

La API y el post-inicio no son tan importantes. Puedo poner esto en un script externo ya que creo que voy a crear una API para estas actualizaciones en lugar de usar ssh. port.php devuelve un puerto disponible para el túnel inverso.

Necesito ese puerto en el momento de la ejecución de autossh. Sé que podría crear una estrofa de script y configurarla como una variable normal, pero el advenedizo monitorearía el PID de curl en lugar de autossh. No sé si funcionaría usar un script bash externo. Quiero evitar escribir nada en el sistema de archivos.

Respuesta1

No me parece. Parece que la mayor parte de esto podría (o debería) dividirse en su propio script para que su advenedizo se vea así:

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

Y /usr/local/sbin/sonarrser:

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

Tenga en cuenta que hubo algunos problemas de sintaxis con el script, así que asegúrese de ejecutarlo antes de comenzar a culpar a Upstart por no iniciarlo.

información relacionada