Folgendes berücksichtigennohup
Ausführung:
nohup script.sh > script.out &
Gibt es eine Möglichkeit, sich vom Terminal abzumelden, die Verbindung wiederherzustellen, den Prozess wieder in den Vordergrund zu bringen und über die Tastatur mit ihm zu interagieren?
Antwort1
neintrennt keinen Befehl vom Terminal, es bewirkt, dass Ihr Skript ihn ignoriertSIGHUP
, und leitet stdout/stderr
zu einer Datei weiter nohup.out
, sodass der Befehl nach der Abmeldung im Hintergrund weiter ausgeführt werden kann.
nohup
setzt den Befehl, den es ausführt, nicht automatisch in den Hintergrund. Dies muss explizit geschehen, indem die Befehlszeile mit einem beendet wird &
.
$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’
jobs
kann aktuell laufende Aufträge und deren Status drucken. Wenn der Befehl jobs
ihn nicht finden kann, ist er keinuntergeordneter Prozessdieser Shell.
$ jobs
[1]+ Running nohup ./script.sh &
Man kann einen Hintergrundjob in Bash mit wieder in den Vordergrund bringen, fg
auch wenn er mit ausgeführt wird nohup
. Aber das ändert nichts an derAusgabeumleitung, die weiterhin in die Datei gehtnohup.out
.
$ fg
nohup ./script.sh
Wenn Sie die Shell/das Terminal schließen oder sich abmelden, ist Ihr Befehl nicht länger ein untergeordnetes Element dieser Shell. Er gehört zuinit
Prozess. Wenn Sie darin suchen, pstree
werden Sie sehen, dass es jetzt Prozess 1 () gehört init
. Dieser kann nicht wieder in den Vordergrund gebracht werden, da der Vordergrund nicht mehr existiert.
Antwort2
Wenn Sie ein Skript starten, es ausführen lassen möchten, ohne dass die Ausgabe Ihr Terminal stört, und es dann später aufrufen möchten, um damit zu interagieren, sollten Sie sich einen Terminal-Multiplexer ansehen. Abhängig von Ihrem System würde ich tmux
oder empfehlen screen
. Informationen zur Verwendung finden Sie unter den folgenden Links:
tmux:
- Eine Einführung in Tmux
- Eine schnelle und einfache Anleitung zu tmux
- Tmux-Spickzettel und Kurzreferenz
Bildschirm:
- Bildschirm - Community-Ubuntu-Dokumentation
- GNU Screen: eine Einführung und ein Tutorial für Anfänger
- Tastaturkürzel für den Bildschirm
bearbeiten: Links für tmux-Primer hinzugefügt
Antwort3
Ich bin für die Verwendung eines Terminal-Multiplexers, abertmux, nicht screen. Screen wird im Grunde nicht gewartet. Seine Konfiguration ist eine dunkle Kunst, die wahrscheinlich erstmals in einem Anhang des Necronomicon beschrieben wurde. Der Versuch, eine eigene Konfiguration zu schreiben, ist wie ein Blick auf Cthulu. Im Ernst. Schauen Sie sich die Leute an.screenrc-Dateien. Natürlich gibt es Möglichkeiten, die Abscheulichkeit einer Konfigurationsdatei auf dem Bildschirm zu mildern.Byobuleistet hervorragende Arbeit als Schleier zwischen sterblichen Benutzern und unheiligem Code. Es verfügt über sinnvolle Farben, eine Menüoberfläche und, was vielleicht am wichtigsten ist, eine Statusleiste.
Aber wie gesagt, ich empfehletmuxstattdessen. Es erfordert noch einige kleinere Konfigurationen, aber es istgut dokumentiert, und Ihre Konfigurationsdatei sieht nicht wie Kauderwelsch aus. Außerdem beginnen Sie mit Farben und einer Statusleiste. Vergleichen Sie meine screenrc- und tmux.conf-Dateien:
Antwort4
&
Jeder Linux-Befehl kann mit dem angehängten Kürzel ' ' in den Hintergrund gesendet werden .
Um alle Hintergrundjobs anzuzeigen, können Siejobs
jobs
[1] + suspended nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2] running nohup sh kafka-server-start.sh ../config/server.properties
[3] - running nohup sudo mongod --dbpath=/var/lib/mongodb
Hier lasse ich drei Jobs im Hintergrund laufen: Zookeeper, Kafka und Mongo Daemon. [1], [2] und [3] sind die jeweiligen Jobnummern für diese Aufgaben.
Sie können diese Aufgaben in den Vordergrund bringen mitfg %$taskNumber.