upstart environmental variable from command

1

Estou tentando fazer túneis ssh reversos para meus clientes usando upstart. Eu tenho muitos clientes e eles obviamente entram e saem da fila às vezes. Isto é o que eu tenho agora, mas não vai 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. Eu posso colocar isso em um script externo, pois acho que vou criar uma API para essas atualizações, em vez de usar o ssh. O port.php retorna uma porta disponível para o túnel reverso.

Eu preciso dessa porta no momento da execução do autossh. Eu sei que eu poderia fazer uma estrofe de script e defini-lo como uma variável regular, mas o upstart iria monitorar o PID de onda em vez de autossh. Eu não sei se usar um script bash externo funcionaria. Eu quero evitar escrever nada no sistema de arquivos.

    
por JpaytonWPD 08.01.2015 / 01:08

1 resposta

0

Eu não penso assim. Parece que a maior parte disso poderia (ou deveria) ser quebrada em seu próprio script para que seu iniciante se pareça 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/sonarr sendo:

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

Note que houve alguns problemas de sintaxe com o script, então certifique-se de que ele esteja rodando antes de começar a culpar o Upstart por não iniciá-lo.

    
por 08.01.2015 / 08:54