Umgebungsvariable „upstart“ aus Befehl

Umgebungsvariable „upstart“ aus Befehl

Ich versuche, mit Upstart Reverse-SSH-Tunnel zu meinen Clients zu erstellen. Ich habe viele Clients und sie gehen offensichtlich zeitweise online und offline. Das ist, was ich jetzt habe, aber es funktioniert nicht, weil die env-Strophe die Ausführung des Befehls nicht unterstützt.

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

Die API und der Post-Start sind nicht so wichtig. Ich kann das in ein externes Skript einfügen, da ich denke, dass ich für diese Updates eine API erstellen werde, anstatt SSH zu verwenden. Die Datei port.php gibt einen verfügbaren Port für den Reverse-Tunnel zurück.

Ich brauche diesen Port zum Zeitpunkt der Ausführung von Autossh. Ich weiß, ich könnte eine Skriptstrophe erstellen und sie wie eine normale Variable festlegen, aber der Upstart würde die PID von Curl überwachen, statt von Autossh. Ich weiß nicht, ob die Verwendung eines externen Bash-Skripts funktionieren würde. Ich möchte vermeiden, etwas in das Dateisystem zu schreiben.

Antwort1

Das glaube ich nicht. Es klingt, als könnte (oder sollte) das meiste davon in ein eigenes Skript aufgeteilt werden, sodass Ihr Emporkömmling so aussieht:

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

Und /usr/local/sbin/sonarrsein:

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

Beachten Sie, dass es einige Syntaxprobleme mit dem Skript gab. Stellen Sie daher sicher, dass Sie es zum Laufen bringen, bevor Sie Upstart die Schuld dafür geben, dass es nicht gestartet wurde.

verwandte Informationen