Problem
Ein Linux/Unix Computer soll später neu starten. Der Reboot soll nicht permanent angelegt sein (z.B. als Cronjob) und es gibt kein screen auf dem System. Die Shell ist bis dahin auch nicht mehr verbunden, daher fällt ein simpler ’shutdown‘ Befehl aus.
Lösung
Das Shutdown mir nohub starten. nohup ist ein Befehl, ein Programm auszuführen, wobei dieses dann das HUP-Signal unterdrückt. Dadurch kann man das Programm starten und laufen lassen, auch wenn es kein offenes TTY mehr gibt.
Üblicherweise nutzt man nohup, um Dienste im Hintergrund zu starten und diese so von der Login-Shell zu trennen. Ausgaben des aufgerufenen Programmes werden automatisch in die Datei nohup.out geleitet, die im Verzeichnis angelegt wird, von dem aus der Befehl ausgeführt wurde. Um zu verhindern, daß das Programm nicht weiterläuft, weil es auf Eingaben wartet, ist es außerdem manchmal notwendig, auch die Standard-Eingabe etwa mit „</dev/null“ umzulenken.
In unserem „Sei still und boote einfach neu“ Beispiel könne wir auf die Ausgane verzichten, daher sieht die einfachste Lösung so aus:
nohub shutdown -r -t sec 120 >/dev/null 2>&1 &
ACHTUNG. nohub ist nicht die Lösung der Wahl, um Dienste permanent im System zu verankern. Wer sein node.js so startet, hat weder nodeJS noch das system.d Konzept verstanden 😉