Was ist Nohup und wie wird es verwendet?

Auf Linux-Systemen gibt es viele verfügbare Befehle. Einige werden Sie mehrmals am Tag verwenden, während andere im Allgemeinen für spezielle Zwecke reserviert sind. nohup ist ein solcher Befehl. Sie werden es nicht jeden Tag benutzen, aber Sie werden dankbar sein, dass es da ist, wenn Sie es brauchen. Hier zeigen wir Ihnen, was Nohup ist und wie Sie es verwenden.

Was ist Nohup?

nohup ist die Abkürzung für „No Hangups“. Es ist kein Befehl, den Sie alleine ausführen. nohup ist ein zusätzlicher Befehl, der das Linux-System anweist, einen Befehl nicht zu stoppen, nachdem er gestartet wurde. Es läuft weiter, bis es fertig ist, auch wenn sich der Benutzer, der es gestartet hat, abmeldet. Es dient einem ähnlichen Zweck wie tmux oder screen, sodass Sie einen Prozess starten können und sich keine Gedanken darüber machen müssen, ob er beendet wird, wenn Sie sich abmelden oder von Ihrem Server getrennt werden.

Die Syntax für nohup ist einfach und sieht etwa so aus:

nohup sh your-script.sh &

Beachten Sie das & am Ende des Befehls. Dadurch wird der Befehl in den Hintergrund verschoben und Sie kehren zur Eingabeaufforderung auf dem Terminal zurück, an dem Sie gerade arbeiten. Oftmals bleibt der Befehl immer noch an das Terminal gebunden, sodass Sie ihn in dem Moment beenden, in dem Sie das geöffnete Fenster schließen und dem Befehl nohup voranstellen.

nohup funktioniert mit fast jedem Befehl, den Sie im Terminal ausführen. Es kann mit benutzerdefinierten Skripten sowie mit Standardsystembefehlen und Befehlszeilendienstprogrammen ausgeführt werden. Verwenden Sie es, um ein Sicherheitsüberwachungsskript auf einem Remote-Server zu starten, damit Sie die Verbindung trennen und weggehen können, oder um Updates im Hintergrund auszuführen, ohne dass sie wegen irgendetwas angehalten werden.

Tipp: Sehen Sie sich andere Möglichkeiten an, um Bash-Befehle im Hintergrund auszuführen.

Nohup.out

Da nohup unabhängig vom Benutzer, der es gestartet hat, weiterlaufen kann, muss der Befehl irgendwo Nachrichten oder Fehler ausgeben. Da ihm kein Terminal zugeordnet werden kann, protokolliert nohup alles in einer Ausgabedatei „nohup.out“.

Standardmäßig befindet sich diese Datei in dem Verzeichnis, in dem Sie den Befehl gestartet haben. „nohup.out“ ist etwas einzigartig, da es sowohl die Standardausgabe als auch die Fehlerausgabe enthält. nohup leitet beide standardmäßig in dieselbe Datei um.

Sie müssen jedoch nicht unbedingt „nohup.out“ verwenden – es ist nur die Standardeinstellung. Sie können eine benutzerdefinierte Ausgabe angeben, wenn Sie nohup ausführen, und sie an einem benutzerdefinierten Speicherort platzieren.

nohup sh your-script.sh > /path/to/custom.out &

Die benutzerdefinierte Ausgabe enthält dieselben Daten wie die Standarddatei „nohup.out“ und eignet sich gut für das oben erwähnte Sicherheitsüberprüfungsskript. Sie könnten es „audit-script-output.txt“ in einer Art gemountetem Remote-Ordner benennen und die Sicherheitslage dieses Servers bequem von Ihrem eigenen Laptop aus anzeigen, anstatt den ganzen Tag Cat-Ausgaben zu durchsuchen.

Sogar für normale Alltagsbenutzer könnte die Angabe einer benutzerdefinierten Ausgabedatei nützlich sein, da sie Ihnen eine klare Unterscheidung zwischen Ausgaben ermöglichen würde. Wenn Sie diesen Befehl mehrmals von Ihrem Standardordner (Home) aus verwenden, ohne eine Ausgabedatei anzugeben, hängt sich „nohup.out“ einfach mit allen Ausgaben an und verursacht ein bisschen Chaos. Wenn Sie die Befehlsausgabe auf organisierte Weise lesen möchten, können Sie dies auf Ihre eigene Weise tun, indem Sie benutzerdefinierte Dateinamen für jede Ausgabe angeben!

Wie unterscheidet sich Nohup von einem Dämon?

An diesem Punkt fragen Sie sich wahrscheinlich, was nohup von einem dämonisierten Prozess unterscheidet. Schließlich scheinen beide relativ dem gleichen Zweck zu dienen, tun es aber nicht wirklich.

Daemons laufen kontinuierlich im Hintergrund. Sie sind am besten für Prozesse reserviert, die Sie niemals beenden möchten, wie z. B. Server. Sie erfordern auch mehr Arbeit beim Programmieren, daher eignen sie sich nicht am besten für einfache einmalige Skripte.

nohup ist eher ein Einweg-Befehl. Betrachten Sie es als ein Skript, dessen Ausführung viel Zeit in Anspruch nimmt, aber letztendlich dennoch abgeschlossen wird. Vielleicht gibt es eine lange und komplizierte Aufgabe, die Sie hin und wieder ausführen und deren Ausführung Stunden dauert. Sie möchten kein Terminal geöffnet oder einen Benutzer angemeldet lassen, verwenden Sie also nohup, um es im Hintergrund laufen zu lassen, und legen Sie die gesamte Ausgabe in einer beliebigen Datei Ihrer Wahl ab, sei es die Standarddatei „nohup.out“ oder ein Speicherort von deine Entscheidung.

Ausführen eines Prozesses mit Nohup

Um einen Prozess mit nohup auszuführen, platzieren Sie es vor jedem Befehl, den Sie ausführen. Dazu gehören alle normalen Programme, die Sie ausführen würden, wie z. B. Discord, Steam, Ihr Browser, ein Texteditor oder jede andere Anwendung, die Ihnen einfällt.

Denken Sie daran, dass Sie Ihren Prozess von der aktiven Eingabeaufforderung trennen müssen, damit Sie Ihr Terminal schließen können, ohne den Prozess plötzlich zu verlieren.

Um beispielsweise Kate (meinen Texteditor) auf meinem System zu öffnen und es vom Terminal zu trennen, während ein Protokoll mit „kate.log“ geführt wird, würde ich Folgendes eingeben:

Nach dem Schließen des Terminals läuft Kate immer noch.

Wenn beim Starten der Anwendung ein Problem auftritt, kann ich einfach „kate.log“ aufrufen und direkt vom Terminal aus herausfinden, was falsch ist, mit:

Dieser Prozess ist nützlich, um festzustellen, ob ein Problem mit einer Anwendung vorliegt, die sich nicht starten lässt oder sich unregelmäßig verhält. Wenn Sie normalerweise ein Programm wie Ihren Browser starten, werden dessen Fehlersignale oft ignoriert. Starten Sie sie im Terminal mit nohup und übergeben Sie die Ausgabe an eine Protokolldatei, um ein klareres Bild davon zu erhalten, was Probleme verursachen könnte.

Ausführen mehrerer Befehle mit Nohup

Da Sie jeden Befehl durch nohup übergeben können, können Sie auch eine Befehlssequenz übergeben. Um dies richtig zu machen, müssen Sie zuerst eine Shell aufrufen und die Befehle als Zeichenfolge weitergeben, da die meisten Terminalemulatoren jeden Befehl nach dem ersten so interpretieren, dass kein nohup vorangestellt ist.

Jede moderne Linux-Distribution hat bash installiert, daher ignorieren wir andere benutzerdefinierte Shells und verwenden diese für dieses Beispiel:

nohup bash -c 'Befehl1 && Befehl2' &

In diesem Befehl haben wir bash aufgerufen, um einen Befehl auszuführen, und sie mit einem doppelten kaufmännischen Und (&&) verkettet. Wir sagen nohup, dass es „bash mit dem Flag -c (execute) ausführen und diesen in einfachen Anführungszeichen eingeschlossenen String übergeben soll.“ Dann weisen wir das Terminal an, die Eingabeaufforderung freizugeben, während die gesamte Sequenz im Hintergrund ausgeführt wird.

Häufig gestellte Fragen

Meine Anwendung wird immer noch geschlossen, wenn ich das Terminal schließe. Was soll ich machen?

Vergewissern Sie sich, dass Sie nach Ihrem Befehl das kaufmännische Und (&) eingegeben haben. Wenn es immer noch geschlossen wird, wenn Sie das Terminal schließen, versuchen Sie es erneut. Geben Sie dann in einer neuen Zeile Folgendes ein: disown

Dadurch wird der laufende Prozess vollständig aus der Jobliste des Terminals entfernt. In einigen Fällen wird ein Prozess, den Sie mit nohup und dem kaufmännischen Und starten, weiterhin Eingaben anfordern und auf Signale vom Terminal warten. Wenn sich das Terminal schließt und die Anwendung noch in der Jobliste ist, sendet es auch Signale an es. Die Anwendung wird auch geschlossen, wenn sie das Signal des Terminals als Hinweis zum Schließen betrachtet.

Durch die Verleugnung wird sichergestellt, dass dies nicht geschieht.

Was ist mit Befehlen, die ein Root-Passwort und andere Eingaben erfordern?

Wir würden nicht empfehlen, einen Befehl auszuführen, der eine Terminaleingabe oder Root-Zugriff über nohup erfordert. Wenn Sie unbedingt müssen, lesen Sie das Handbuch für den Befehl, den Sie ausführen möchten, und prüfen Sie, ob es eine Option zum Überspringen von Bestätigungen gibt. Zum Beispiel,. Um den Paketmanager in Arch Linux einfach ohne Bestätigungen auszuführen, verwenden Sie das Flag --noconfirm.

Es ist ein düsteres und gefährliches Gebiet für den Root-Zugriff. Wenn Sie darauf bestehen, einen Befehl über nohup als root auszuführen, tun Sie dies, nachdem Sie die Root-Shell aufgerufen haben, indem Sie su in Ihr Terminal eingeben und damit fortfahren. Sie werden oft feststellen, dass Anwendungen, die Ihr Root-Passwort wollen, nicht gut darauf reagieren.

Warum leitet nohup stderr nach stdout um?

Wenn Sie einen Befehl über nohup ausführen, erhalten Sie eine Ausgabe mit folgendem Inhalt: nohup: Ignorieren der Eingabe und Umleiten von stderr zu stdout

Dies bedeutet, dass Sie keine Terminaleingaben mehr an den Befehl senden können, den Sie gerade ausgeführt haben, und alle Daten, die normalerweise durch Ihr Terminal strömen würden, werden zu einem einzigen Stream (stdout) umgeleitet und dann in eine Datei ausgegeben ( standardmäßig „nohup.out“).

Index
  1. Was ist Nohup?
  2. Nohup.out
  3. Wie unterscheidet sich Nohup von einem Dämon?
  4. Ausführen eines Prozesses mit Nohup
  5. Ausführen mehrerer Befehle mit Nohup
  6. Häufig gestellte Fragen
    1. Meine Anwendung wird immer noch geschlossen, wenn ich das Terminal schließe. Was soll ich machen?
    2. Was ist mit Befehlen, die ein Root-Passwort und andere Eingaben erfordern?
    3. Warum leitet nohup stderr nach stdout um?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up