Nohup-Job in den Vordergrund bringen

Nohup-Job in den Vordergrund bringen

Folgendes berücksichtigennohupAusfü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/stderrzu einer Datei weiter nohup.out, sodass der Befehl nach der Abmeldung im Hintergrund weiter ausgeführt werden kann.

nohupsetzt 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’

jobskann aktuell laufende Aufträge und deren Status drucken. Wenn der Befehl jobsihn 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, fgauch 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 zuinitProzess. Wenn Sie darin suchen, pstreewerden 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 tmuxoder empfehlen screen. Informationen zur Verwendung finden Sie unter den folgenden Links:

tmux:

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.

verwandte Informationen