Wie halten Sie dieses hinterhältige Bash-Skript rund um die Uhr im Hintergrund laufen?

Wie halten Sie dieses hinterhältige Bash-Skript rund um die Uhr im Hintergrund laufen?

Das klingt vielleicht wie ein Duplikat, aber hören Sie mich zuerst an.

Ich führe ein Shell-Skript aus, das eine aktive Standardeingabe hat und beim Start manchmal eine Eingabe erfordert. Es muss rund um die Uhr laufen und bei einem Fehler neu gestartet werden, entweder durch Eingabe eines Befehls oder einfach durch Eingabe von „y“, wenn die Eingabeaufforderung angezeigt wird. Ich habe bereits zwei Methoden ausprobiert: nohup verwenden und Strg+Z klicken, bg eingeben – beides zeigt den Job als gestoppt an und er wird nicht ausgeführt. Erst wenn ich ihn ausführe, fgwird er aktiv. Irgendeine Ahnung, wie man das lösen kann?

PS: Ich habe es auch versucht, scriptcommand &es endete ebenfalls mit „Gestoppt“.

Wäre es sinnvoll, es als systemd-Dienst einzurichten?

Antwort1

tmuxProgramme, die wie beschrieben auf Eingaben angewiesen sind, müssen in einem Terminal-Multiplexer wie ( gestartet werden .https://en.wikipedia.org/wiki/Tmux) oder screen(https://www.gnu.org/software/screen/). Stellen Sie es sich als eine textbasierte Version eines Terminalfensters vor.

Mit screen my-programstarten Sie my-program. Anschließend können SieablösenVon Ihrer virtuellen Bildschirmkonsole aus können Sie die Tastenkombination Ctrl- A Ctrl- verwenden D, und Sie sind wieder in der Shell, in der Sie gestartet sind, aber Ihr Programm läuft im Hintergrund weiter. Anschließend screen -rkönnen Sie mit die Verbindung zur virtuellen Konsole wiederherstellen.

Der Bildschirm (und Ihr Programm) wird weiter ausgeführt, bis Ihr Programm beendet oder der Server neu gestartet wird.

tmuxist ziemlich ähnlich, hat aber mehr Optionen und Funktionen und verwendet andere Tastaturkürzel.

Antwort2

Damit das Skript im Hintergrund weiterläuft, verwenden Sie nohup: nohup scriptcommand &. Idealerweise hätte das Skript die Option, keine Eingaben abzufragen. Wenn dies aus irgendeinem Grund keine Option ist,Erwartenkann zur Eingabe von „y“ verwendet werden.

Wenn Sie einen systemd-Dienst für das Skript erstellen, kann das Skript beim Systemneustart gestartet werden. Sie können Restart=alwaysin Ihrer systemd-Datei auch verwenden, um den Dienst neu zu starten, wenn er beendet oder beendet wird.Die systemd-Dokumentation enthält weitere Informationen.

verwandte Informationen