Ich möchte ein Skript start.sh
auf einem Remote-Server ausführen, auf dem Folgendes ausgeführt wird:
nohup node server.js &
Naiv nenne ich SSH so:
ssh myserver <<EOF
./start.sh &
EOF
Dadurch wird das Skript gestartet, die Sitzung bleibt jedoch verbunden. Ich möchte diesen Schritt mit anderen Befehlen in einem Skript ausführen, das ist also nicht gut.
Wie kann ich eine SSH-Verbindung zum Remote-Computer herstellen, einen nohup
Befehl im Hintergrund starten und dann die Verbindung trennen? Ich nehme an, ich könnte den SSH-Prozess selbst in den Hintergrund stellen, aber das scheint nicht richtig zu sein.
quelle
> /dev/null
.> /dev/null 2>&1
ist es, jede Ausgabe von stdout / stderr durch Weiterleiten an das Schwarze Loch zu verwerfen lolnohup command2 >> /path/to/command2.log 2>&1 &
dass der Prozess verloren geht, wenn ich einfach einen Befehl wie in einem Terminal starte und dann das Terminal schließe?Warum nicht einfach tmux oder screen und fertig? Zum Beispiel:
Dies ist praktisch, wenn eine Endlosschleife ausgeführt wird oder eine Weile dauert. Sie können die Sitzung trennen und sie bleibt aktiv.
quelle
läuft nicht im Daemon-Modus und hält Ihre SSH-Sitzung in Verbindung. Die SSH-Sitzung kehrt in 10 Sekunden zurück, obwohl Sie nohup verwendet haben.
Grund dafür ist, dass stdout und stderr weiterhin mit Ihrer Sitzung verbunden sind. Es hält die ssh-Sitzung am Leben, nohup hilft nicht.
Diese:
kehrt sofort zurück. Es startet den Remote-Prozess mit nohup und beendet die ssh-Sitzung sofort.
quelle
Kürzere Form:
Es scheint, dass die Bash selbst das Trennen vom Terminal durchführt, sodass kein Nohup erforderlich ist. Ich starte Ubuntu 14.04 x86_64, bash 4.3.11.
quelle
nohup;
gibt nur eine Beschwerde über fehlende Argumente aus.command 1; command 2; ...
Script-OP ausführen möchte. OP kann auch Sonderfälle dieser Antwort verwenden:ssh myserver ./start.sh &>/dev/null &