nohup: Hintergrundprozesse im Terminal ohne Unterbrechungen ausführen
Was ist nohup?
Nohup (keine Hangups) ist ein nützliches Hilfsprogramm in Unix-basierten Systemen, das es dir ermöglicht, Hintergrundprozesse ohne Unterbrechungen durch Hangups oder die Beendigung der Shell auszuführen. Wenn du mit einem Befehl einen Hintergrundprozess startest, wird der Prozess durch ein Signal seines übergeordneten Prozesses (der Shell) unterbrochen, wenn sich der übergeordnete Prozess von der Shell abmeldet. Dies kann dazu führen, dass der Prozess gestoppt wird oder unbeendet bleibt.
Nohup löst dieses Problem, indem es ein neues Prozessgruppen-Leader (PGID) erstellt und den Hintergrundprozess in diese neue Prozessgruppe verschiebt. Der neue Prozess ist nicht direkt mit der Shell verbunden und wird daher nicht unterbrochen, wenn sich die Shell abmeldet. Stattdessen wird der Prozess weiterhin im Hintergrund ausgeführt, auch wenn du dich abmeldest oder dein Terminal schließt.
Haupteigenschaften:
- Hält Hintergrundprozesse am Laufen, auch wenn die Shell beendet wird
- Erstellt eine neue Prozessgruppe, um Unterbrechungen durch Hangups zu vermeiden
- Leitet die Standardausgabe und -fehlerströme an eine Datei um, die du angeben kannst
Warum sollte ich nohup verwenden?
Wenn du ein Terminalbefehl ausführst und das Terminalfenster schließt, wird der Befehl unterbrochen. Dies kann zu Datenverlust oder unerwünschten Ergebnissen führen, wenn der Befehl eine längere Zeit läuft oder unbeaufsichtigt bleiben soll. Hier findest du einige Gründe, warum du nohup verwenden solltest:
Lange laufende Prozesse
Möchtest du einen Befehl über einen längeren Zeitraum im Hintergrund ausführen, z. B. eine Datenanalyse oder einen Webserver. Nohup stellt sicher, dass der Prozess auch dann weiterläuft, wenn du die Verbindung zum Terminal trennst oder das Fenster schließt.
Unbeaufsichtigte Prozesse
Wenn du Prozesse ausführen möchtest, die nicht deiner unmittelbaren Aufmerksamkeit bedürfen, wie z. B. Sicherungsoperationen oder Systemüberwachungen, kannst du nohup verwenden, um sicherzustellen, dass sie auch ohne deine Anwesenheit weiterlaufen.
Automatisierung von Aufgaben
Nohup kann verwendet werden, um Aufgaben zu automatisieren, die du regelmäßig im Hintergrund ausführen möchtest. Beispielsweise kannst du nohup verwenden, um einen Befehl zu einer bestimmten Zeit oder in regelmäßigen Abständen auszuführen.
Zusätzliche Details erhältst du bei: Netzwerk unter Linux neu starten: Eine Schritt-für-Schritt-Anleitung
Fehlerbehandlung
Nohup leitet die Standardausgabe und den Standardfehler in eine Logdatei um, selbst wenn der Prozess im Hintergrund läuft. Dies erleichtert die Fehlerbehebung, da du die Ausgabe auch nach dem Schließen des Terminalfensters überprüfen kannst.
Indem du nohup verwendest, kannst du die Kontinuität wichtiger Prozesse sicherstellen, auch wenn du nicht am Terminal anwesend bist. Dies kann Ausfallzeiten reduzieren, die Effizienz verbessern und dir die Kontrolle über deine Hintergrundprozesse geben.
Wie verwende ich nohup?
Um nohup zu verwenden, kannst du den folgenden Befehl in deinem Terminal eingeben:
nohup <Befehl> [Argumente]
Dabei ist <Befehl>
das Programm oder der Befehl, den du im Hintergrund ausführen möchtest, und <Argumente>
sind die Argumente, die du an den Befehl übergeben möchtest.
I/O-Umleitung
Wenn du Befehle im Hintergrund ausführst, möchten möglicherweise Ausgaben an die Konsole senden. Du kannst die Ausgaben umleiten, indem du die folgenden Optionen verwendest:
-
Standardausgabe (stdout): Um stdout umzuleiten, verwende
>
. -
Standardfehlerausgabe (stderr): Um stderr umzuleiten, verwende
2>
. -
Beide Ausgaben: Um sowohl stdout als auch stderr umzuleiten, verwende
&>
.
Beispiel:
nohup python script.py &> log.txt
Dieser Befehl führt das Python-Skript script.py
im Hintergrund aus und leitet sowohl stdout als auch stderr in die Datei log.txt
um.
Weiterführende Informationen gibt es bei: Linux: USB-Geräte auflisten
Sitzung anhängen
Wenn deine Hintergrundsitzung beendet wird, kannst du sie mit dem Befehl fg
erneut an deine aktuelle Shell anhängen.
Beispiel:
fg
Best Practices
- Log-Dateien verwenden: Leite nohup-Ausgaben in Log-Dateien um, um den Verlauf zu speichern und Fehlerbehebungen zu erleichtern.
- Vorsicht bei langen laufenden Prozessen: Sehr lange laufende Prozesse können das System belasten. Verwende sie mit Vorsicht.
-
Prozessstatus überprüfen: Überwache den Status deiner Hintergrundprozesse regelmäßig mit Tools wie
ps
,jobs
odertop
.
Grundlagen der nohup-Syntax
Die Syntax von nohup
ist relativ einfach und besteht aus dem Befehl selbst, gefolgt von den Optionen und dem Befehl, den du im Hintergrund ausführen möchtest.
Syntax
nohup Befehl [Optionen]
Optionen
Die am häufigsten verwendeten nohup
-Optionen sind:
-
-m
: Sendet eine Kopie der Standardausgabe und des Standardfehlerausgaben anmail
. -
-o [Datei]
: Gibt an, dass die Standardausgabe in die angegebene Datei umgeleitet werden soll. -
-e [Datei]
: Gibt an, dass die Standardfehlerausgabe in die angegebene Datei umgeleitet werden soll. -
-n
: Verhindert, dass die Eingabe von der Standardeingabe gelesen wird. -
-p
: Fügt den Prozess der Prozessgruppe 0 hinzu, was das Beenden des Prozesses durch Signale verhindert, die an die Prozessgruppe gesendet werden. -
-x
: Veranlasstnohup
, den angegebenen Befehl in einer neuen Shell auszuführen.
Beispiele
Hier sind einige Beispiele für die Verwendung der nohup
-Syntax:
- Führe einen Befehl ohne Unterbrechungen aus und sende seine Ausgabe per E-Mail:
nohup Befehl -m
- Führe einen Befehl ohne Unterbrechungen aus und leite seine Ausgabe in eine Datei um:
nohup Befehl -o ausgabe.txt
- Führe einen Befehl ohne Unterbrechungen aus und leite seine Fehlerausgabe in eine Datei um:
nohup Befehl -e fehler.txt
Beispiele für die Verwendung von nohup
Automatisches Ausführen von Skripten im Hintergrund
Verwenden von nohup
zusammen mit &
ermöglicht dir das automatische Ausführen von Skripten im Hintergrund:
nohup ./script.sh &
Dies führt script.sh
im Hintergrund aus und leitet die Ausgabe in eine Datei namens nohup.out
um.
Abfangen von Fehlerausgaben
Du kannst auch die Fehlerausgabe abfangen, indem du Folgendes verwendest:
nohup ./script.sh >logfile 2>&1 &
Dadurch wird die Standardausgabe (stdout
) in die Datei logfile
umgeleitet und die Standardfehlerausgabe (stderr
) an stdout
angehängt.
Fortsetzen von Prozessen nach Trennen der Verbindung
Wenn du dich vom Terminal getrennt hast, während ein Prozess mit nohup
ausgeführt wurde, kannst du die Ausführung fortsetzen, indem du Folgendes ausführst:
tail -f nohup.out
Dies zeigt dir die fortlaufende Ausgabe des Prozesses an.
Ausführen von Befehlen mit Umgebungsvariablen
Du kannst auch Umgebungsvariablen festlegen, bevor du einen Befehl mit nohup
ausführst:
nohup MY_VAR=value ./script.sh &
Dadurch wird die Umgebungsvariable MY_VAR
mit dem Wert value
für das Skript script.sh
festgelegt.
Fehlerbehebung bei nohup
Fehlermeldung: "nohup: Befehl nicht gefunden"
- Ursache: nohup ist nicht in der PATH-Variable enthalten.
- Lösung: Führe nohup aus dem Verzeichnis /usr/bin aus oder füge /usr/bin zu deiner PATH-Umgebungsvariablen hinzu.
Fehlermeldung: "nohup: kann Befehl nicht finden"
- Ursache: Der angegebene Befehl existiert nicht oder befindet sich nicht in der PATH-Variable.
- Lösung: Überprüfe den Befehlsnamen und füge gegebenenfalls das Verzeichnis des Befehls zu deiner PATH-Umgebungsvariablen hinzu.
Fehlermeldung: "nohup: kein solches Gerät oder eine solche Datei"
- Ursache: Die angegebene Ausgabeumleitungsdatei existiert nicht oder du hast keine Schreibberechtigungen für sie.
- Lösung: Erstelle die Datei oder weise dir Schreibberechtigungen für sie zu.
Fehlermeldung: "nohup: kann Standardausgabe nicht umleiten"
- Ursache: Du hast nicht die erforderlichen Berechtigungen zum Schreiben in die angegebene Ausgabeumleitungsdatei.
- Lösung: Weise dir Schreibberechtigungen für die Datei zu.
Fehlermeldung: "nohup: kann Prozesskennung nicht ermitteln"
- Ursache: Der nohup-Prozess wurde unerwartet beendet.
- Lösung: Überprüfe die Protokolle oder die Ausgabeumleitungsdatei, um Hinweise auf den Grund für die Beendigung zu finden.
Allgemeine Tipps zur Fehlerbehebung
- Überprüfe die Syntax deines nohup-Befehls.
- Stelle sicher, dass du die richtigen Berechtigungen hast.
- Überprüfe die Protokolle und die Ausgabeumleitungsdatei auf Fehlermeldungen.
- Versuche, den nohup-Befehl mit der Option -x auszuführen, um zusätzliche Debuginformationen anzuzeigen.
Unterschiede zwischen nohup und &
Während sowohl nohup als auch & Prozesse im Hintergrund ausführen, gibt es einige entscheidende Unterschiede zwischen ihnen:
Siehe auch: chown recursive: Rekursives Ändern von Besitzrechten in Linux-Verzeichnissen und -Dateien
Dauerhaftigkeit
- nohup: Prozesse, die mit nohup gestartet werden, bleiben auch nach dem Abmelden oder Schließen des Terminals aktiv. Sie werden zu sogenannten "Daemonen"-Prozessen.
- &: Prozesse, die mit & gestartet werden, werden beendet, sobald sich der Benutzer vom Terminal abmeldet oder dieses schließt.
Signalbehandlung
- nohup: nohup ignoriert das SIGHUP-Signal, das standardmäßig gesendet wird, wenn sich der Benutzer abmeldet. Dies ermöglicht es dem Prozess, fortzufahren, auch wenn das Terminal geschlossen wird.
- &: Prozesse, die mit & gestartet werden, empfangen das SIGHUP-Signal und beenden sich daher, wenn sich der Benutzer abmeldet.
Ausgabenprotokollierung
- nohup: nohup leitet die Standardausgabe und Standardfehlerausgabe des Befehls in eine Datei um (standardmäßig nohup.out). Dies ist nützlich, um Ausgaben zu protokollieren, auch wenn der Prozess im Hintergrund läuft.
- &: Prozesse, die mit & gestartet werden, leiten ihre Ausgaben nicht automatisch in eine Datei um.
Praxisbeispiel
Angenommen, du möchtest einen lang laufenden Befehl ausführen, dessen Ausgabe du später einsehen möchtest. In diesem Fall wäre nohup die bessere Wahl, da der Prozess auch nach dem Schließen des Terminals aktiv bleibt und seine Ausgaben in eine Datei protokolliert werden.
Wenn du hingegen einen Prozess startest, der nur für eine kurze Zeit benötigt wird und keine Protokolldatei benötigt, kannst du & verwenden.
Zusätzliche Optionen für nohup
Neben den Grundfunktionen bietet nohup
auch eine Reihe zusätzlicher Optionen, mit denen du die Ausführung deiner Hintergrundprozesse noch weiter anpassen kannst:
-o <Datei>
Mit dieser Option kannst du eine Datei angeben, in die die Standardausgabe deines Prozesses umgeleitet werden soll. Dies ist besonders nützlich, wenn du die Ausgabe des Prozesses für spätere Überprüfungen oder Analysen speichern möchtest.
-e <Datei>
Ähnlich wie -o
kannst du mit dieser Option eine Datei angeben, in die die Standardfehlerausgabe deines Prozesses umgeleitet werden soll. So kannst du Fehlermeldungen und andere Problemausgaben für die spätere Fehlersuche protokollieren.
Für weitere Informationen, siehe auch: Linux-Deinstallation: Schritt-für-Schritt-Anleitung zum Entfernen von Linux
--append
Diese Option weist nohup
an, die Ausgabe des Prozesses an das Ende der angegebenen Datei anzuhängen, anstatt sie zu überschreiben. Dies ist nützlich, wenn du die Ausgabe mehrerer Prozesse in einer einzigen Datei protokollieren möchtest.
--foreground
Im Gegensatz zum Standardverhalten von nohup
bewirkt diese Option, dass der Prozess im Vordergrund ausgeführt wird, anstatt als Hintergrundjob. Dies kann nützlich sein, wenn du die Ausgabe des Prozesses in Echtzeit sehen möchtest oder wenn du ihn interaktiv steuern musst.
--dry-run
Diese Option führt einen "Trockenlauf" von nohup
durch, ohne den angegebenen Befehl tatsächlich auszuführen. Dies kann hilfreich sein, um die Befehlssyntax zu überprüfen und sicherzustellen, dass alle Optionen korrekt festgelegt sind, bevor du den Prozess startest.
Beispiele für die Verwendung zusätzlicher Optionen
- Um die Ausgabe eines Prozesses in die Datei "my_output.txt" umzuleiten:
nohup my_command > my_output.txt
- Um Fehlermeldungen in die Datei "my_errors.txt" umzuleiten:
nohup my_command 2> my_errors.txt
- Um die Ausgabe eines Prozesses an das Ende der Datei "my_log.txt" anzuhängen:
nohup my_command >> my_log.txt
Durch die Verwendung dieser zusätzlichen Optionen kannst du nohup
optimal an deine spezifischen Anforderungen anpassen und sicherstellen, dass deine Hintergrundprozesse ordnungsgemäß ausgeführt und protokolliert werden.
Best Practices für die Verwendung von nohup
Befolge diese Best Practices, um die Verwendung von nohup effektiv zu gestalten:
Überprüfe die Berechtigungen
Stelle sicher, dass du die entsprechenden Berechtigungen zum Ausführen des Befehls im Hintergrund hast. Andernfalls kann nohup den Befehl nicht ausführen.
Mehr dazu erfährst du in: Die Macht der Linux-Konsole: Der Source-Befehl enthüllt
Verwende die Standardausgabeumleitung
Leite die Standardausgabe des Befehls in eine Datei um, um eine Aufzeichnung seiner Aktivitäten zu haben. Dies ist besonders hilfreich, wenn du den Prozess später überprüfen möchtest. Verwende beispielsweise nohup ./script.sh > output.txt &
.
Überwache den Prozess
Überwache den Hintergrundprozess regelmäßig, um seinen Status zu überprüfen. Verwende dazu Befehle wie ps
oder jobs
. Wenn der Prozess unerwartet beendet wird, kannst du die Ursache untersuchen und entsprechende Maßnahmen ergreifen.
Setze Zeitstempel
Füge den Ausgabeprotokollen Zeitstempel hinzu, um den Beginn und das Ende des Hintergrundprozesses zu markieren. Dies hilft dir, die Dauer des Prozesses zu bestimmen und mögliche Unterbrechungen zu identifizieren.
Verwende Timeout-Optionen
Passe die Timeout-Optionen von nohup an, um den Prozess automatisch zu beenden, wenn er eine bestimmte Ausführungszeit überschreitet. Dies kann unerwünschte Prozesse verhindern, die unbeabsichtigt im Hintergrund laufen.
Umgib shell-Befehle mit Anführungszeichen
Wenn du shell-Befehle in nohup verwendest, umgib sie mit Anführungszeichen. Dies stellt sicher, dass die Befehle korrekt interpretiert werden.
Überlege dir die Verwendung von screen oder tmux
Für komplexere Hintergrundprozesse, die eine längere Ausführung erfordern, ziehe die Verwendung von Tools wie screen oder tmux in Betracht. Diese Tools bieten erweiterte Funktionen wie Sitzungsverwaltung und das Wiederherstellen von getrennten Sitzungen.
Weitere Einzelheiten findest du in: Ulimit: Der ultimative Leitfaden zum Verwalten von Prozessressourcen
Fazit
Du hast nun ein umfassendes Verständnis der Verwendung von nohup
erlangt, um Hintergrundprozesse im Terminal auszuführen, ohne durch Unterbrechungen gestört zu werden. Dieses Wissen ermöglicht es dir, Langzeitaufgaben und Skripte effizient auszuführen, ohne dass du sie ständig überwachen musst.
Vorteile der Verwendung von nohup
-
Kontinuierliche Ausführung bei Verbindungsabbrüchen:
nohup
stellt sicher, dass Prozesse weiterlaufen, selbst wenn du die Terminalverbindung schließt oder das System neu startest. -
Prozesssteuerung: Du kannst die Ausführung von
nohup
-Prozessen mit Befehlen wiekill
,ps
undjobs
steuern. -
Fehlerbehandlung:
nohup
leitet Standardausgaben und -fehler in eine Logdatei um, sodass du etwaige Fehler später analysieren kannst.
Best Practices
- Verwende
nohup
für langwierige Aufgaben oder Skripte, die über einen längeren Zeitraum ausgeführt werden müssen. - Lege eine Logdatei fest, um Fehler und Ausgaben zu protokollieren.
- Vermeide die Verwendung von
exit
-Befehlen innohup
-Prozessen, da dies zur Beendigung des Prozesses führt. - Überwache die Ausführung von
nohup
-Prozessen regelmäßig, um sicherzustellen, dass sie wie gewünscht funktionieren.
Alternativen zu nohup
-
&: Der Operator
&
führt Prozesse ebenfalls im Hintergrund aus, bietet aber nicht den gleichen Grad an Fehlerbehandlung und Kontrolle wienohup
. - screen: Ein Terminal-Multiplexer, der es ermöglicht, mehrere Sitzungen in einem einzigen Terminalfenster gleichzeitig auszuführen.
- tmux: Eine weitere Option für Terminal-Multiplexing, die eine fortschrittlichere Steuerung und Fensterverwaltung bietet.
Zusammenfassend lässt sich sagen, dass nohup
ein unverzichtbares Werkzeug ist, um Hintergrundprozesse im Terminal ohne Unterbrechungen auszuführen. Indem du diese Best Practices einhältst, kannst du die Vorteile von nohup
optimal nutzen und deine Aufgaben effizienter erledigen.
Verwandte Artikel
- Linux from Scratch: Baue dein eigenes Linux-Betriebssystem
- Bosch Smart Home Rolladensteuerung: Komfort und Effizienz vereint
- Linux-Ordner umbenennen: Eine umfassende Anleitung
- Linux-Prozesse im Hintergrund starten: Eine ausführliche Anleitung
- Sudo apt-get Update: Aktualisieren Sie Ihr System und halten Sie es sicher
- DEB-Dateien in Linux installieren: Eine umfassende Anleitung
- Teilen von Dateien unter Linux: Der Befehl 'split'
- Bash Base64-Decodierung: Einfach gemacht
- Sortierung von Dateien nach Größe mit dem Befehl "ls" in Linux
- Nachteile der Gaumennahterweiterung: Was Sie wissen sollten
- Guggul: Das indische Zentrum der Gesundheit
Neue Posts
World of Warcraft auf Linux spielen: Eine guide für Abenteurer
Einführung in World of Warcraft
Node.js NVM: Antworten auf die häufigsten Fragen
Entwicklung
Professionelle Gmail-HTML-Signaturen: Erstellen, Gestalten und Nutzen
Marketingstrategien
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
HTML-Content: Der ultimative Leitfaden zur Erstellung ansprechender Webseiten
SEO-Optimierung
Das HTML-Title-Attribut: Ein Leitfaden zur Optimierung von Titeln für SEO und Benutzerfreundlichkeit
Online-Marketing
HTTP-Statuscodes: Ihre Bedeutung und Verwendung im Web
Einführung in HTTP-Statuscodes
Besucherzähler für Websites: Tracking Ihres Website-Traffics für Erfolg
SEO-Optimierung
Beschleunigen Sie die Dateneingabe mit HTML Datalist
Webentwicklung
HTML in PUG konvertieren: Einfach und schnell gemacht
Webentwicklung
Beliebte Posts
SteamCMD: Der umfassende Leitfaden zur Verwaltung von Steam-Servern
Sicherheitsrichtlinien
POST-Anfragen: Erstellen, Senden und Empfangen von Daten im Web
Webentwicklung
LaTeX: Das mächtige Werkzeug für hochwertiges Dokumentenschreiben
Dokumentenerstellung
Wiederherstellung beschädigter Linux-Dateisysteme mit fsck: Ein umfassender Leitfaden
Fehlerbehebung
Die vollständige Anleitung zu poczta wp: Alles, was Sie wissen müssen
Sicherheit und Datenschutz
Gigacube Admin: Zugang zu den erweiterten Einstellungen Ihres Routers
Fehlerbehebung
Linux Mint Themes: Personalisieren Sie Ihren Desktop
Open Source
TCPdump-Beispiele: Paketakquise und Netzwerkdiagnose
Fehlerbehebung
Mounten von ISO-Images unter Linux: Eine Schritt-für-Schritt-Anleitung
Anleitungen
Linux Open File: Anleitung zum Öffnen, Bearbeiten und Löschen von Dateien aus dem Terminal
Open Source