Unix – Bitte nicht aufhängen – nohup
Gelegenheitsadministratoren aus dem Windows-Umfeld dürfte der Unix-/Linux-Befehl nohup (no hang up) wenig sagen. Unter Unix benötigt man das Kommando nohup, um Prozesse im Hindergrund laufen zulassen, auch wenn man das ausführende Shell-Fenster schliesst. Somit läuft ein Prozess mittels nohup ähnlich, wie dies auch für Unix-Demons und unter Windows für die Windows-Dienste gilt.
Hier ein einfaches Beispiel für einen nohup-Aufruf:
nohup bin/runProgram.sh &
Durch den Aufruf mit nohup wird das Programm von SIGHUP nicht mehr beendet, und man kann sich problemlos aus der ausführenden Shell ausloggen. Wichtig ist auch noch, dass nach absetzen des Befehls das Terminal für Ausgaben nicht zur Verfügung steht. Die Ausgabe des Prozesses, die normalerweise auf dem Terminal angezeigt wird, wird nun in die Datei nohup.out umgeleitet. Falls dies nicht gewünscht ist, können STDOUT und STDERR über eine Named Pipe auch in andere Log-Dateien umgelenkt werden.
Aufruf mittels nohup und umleiten der Ausgabeströme:
nohup bin/runProgram.sh 1>/var/log/out.log 2>/var/log/err.log &
Man sieht, dass das Kommando nohup zwar ein praktisches Progrämmchen ist – allerdings mit einigen Ecken und Kanten, die es beim Einsatz zu beachten gilt.
Die Zeitschrift iX hat hierzu einen sehr interessanten Beitrag veröffentlicht, in dem der nohup-Befehl unter Unix nochmals vorgestellt und auf evtl. Probleme und Lösungsmöglichkeiten hingewiesen wird.
Link: iX – Für Langläufer
Cooler Tipp! Echt nützlich, wusste ich nicht. Hab deinen Blog kürzlich gefunden, toller Inhalt :)
du weisst nicht zufaellig, wie man nach dem erneuten einloggen den standard-output von dem programm wieder erneuert?
Hi eXtide,
ich glaube, dass ich dir bei diesem Thema nicht weiterhelfen kann, da ich deine Frage nicht mal komplett verstanden habe ;-)
Aber vielleicht weiss ja ein anderer über dieses Thema bescheid. Ich gebe das Thema mal an die Netzgemeinde.
Please comment…
Um nach dem Wiedereinloggen an das Programm wieder heran zu kommen, ist es geschickter mit dem Kommandozeilenbefehl “screen” zu arbeiten.
@eXtide: Wenn du nach dem wiedereinloggen den Output des Programms weiterverfolgen willst, reicht ein einfaches ‘tail -f nohup.out’ (Wenn du die ausgabe in die Datei nohup.out schreiben lässt)
gruß
[...] Typischerweise findet sich die Bezeichnung dann als /dev/sda. Damit man sich auch vom Raspberry abmelden kann, also auch nach Beenden der Terminalsitzung der Check weiter läuft, startet man am besten mit nohup: [...]