Die Verwendung eines SSH-Terminals (z. B. Putty, Xshell) zum Herstellen einer Verbindung mit einem Linux-Server zum Ausführen zeitaufwändiger Aufgaben kann mehrere Stunden oder sogar Tage dauern. Zu diesem Zeitpunkt ist das Terminal belegt und wir haben noch andere Aufgaben zu erledigen. Daher müssen wir diese Art zeitaufwändiger Aufgaben in den Hintergrund stellen, damit sie ausgeführt werden können. Wir müssen nur die Protokolle aufzeichnen. Es gibt die folgenden gängigen Methoden, um diese Anforderung zu erfüllen. Befehl & Geben Sie den Befehl & in das Terminal ein, um ihn auszuführen. Zu diesem Zeitpunkt ist die Verwendung von Strg + C zum Beenden des Befehls ungültig, da das Programm gegen das SIGINT1-Signal von & im Hintergrund immun ist und weiter ausgeführt wird. Wenn Sie das Terminal jedoch direkt schließen, wird der Vorgang beendet. Es ist ersichtlich, dass der im Hintergrund ausgeführte Prozess mit & durch das Signal SIGHUP2 beendet wird. Wenn Sie das Terminal jedoch normal mit dem Befehl exit verlassen, wird das Programm im Hintergrund weiter ausgeführt und nicht beendet. nohup-Befehl Standardmäßig wird die Standardausgabe an nohup.out im aktuellen Verzeichnis angehängt. Wenn die Datei nohup.out im aktuellen Verzeichnis nicht beschreibbar ist, wird die Ausgabe in die Datei Dann fällt es uns leicht, diese beiden Funktionen zu kombinieren und den Befehl wie folgt auszuführen: Dadurch wird die Aufgabe im Hintergrund ausgeführt, bis sie abgeschlossen ist. Die Standardausgabe (1) und die Standardfehlermeldung (2) des Programms werden in die Datei /home/user/myfile.log geschrieben. Bildschirm-Tool Der Bildschirm kann als Sitzungsfensterverwaltungstool verstanden werden. Für den allgemeinen Gebrauch müssen wir nur die folgenden Vorgänge ausführen: # Bildschirm mit yum installieren Yum-Installationsbildschirm # Erstellen Sie ein Sitzungsfenster mit dem Namen „Testbildschirm -S Test“ # Fenster vorübergehend verlassen Strg+ad (Strg gedrückt halten und nacheinander a, d drücken) # Vorhandenen Sitzungsfenster-Bildschirm anzeigen -ls # Rufen Sie das Fenster screen -r test auf screen -r Prozess-ID # Schließen Sie das Fenster exit # Fensterwechsel Strg+ac: Erstellt ein Fenster in der aktuellen Bildschirmsitzung Strg+aw: Fensterliste Strg+an: Nächstes Fenster Strg+ap: Vorheriges Fenster Strg+a 0-9: Wechselt zwischen dem 0. und dem 9. Fenster Mit dem Bildschirmtool können wir ein Fenster auf dem Terminal erstellen, die erforderlichen Befehle ausführen, es dann vorübergehend verlassen und dann mit anderen Dingen fortfahren. Natürlich können Sie auch andere Terminals verwenden, um eine Verbindung zum Server herzustellen, und den Befehl screen -r verwenden, um eine Verbindung zum erforderlichen Fenster herzustellen. Sie werden feststellen, dass das Programm immer ausgeführt wird und das Verlassen des Terminals keine Auswirkungen auf die Programme hat, die auf diesen vorübergehend verlassenen Terminals ausgeführt werden. prüfen: Wir schreiben ein Testskript test.sh: #!/bin/sh für ((i=1; i<1000; i++)) Tun d=`Datum '+%Y-%m-%d %H:%M:%S'` echo "$d $ith-Ausgabe;" tt 2 Sekunden schlafen Erledigt Schlag Verwenden Sie einfach &, um es im Hintergrund auszuführen: [root@localhost test.cc]# ./test.sh > test.log 2>&1 & [1] 15037 [root@localhost test.cc]# ps -aux | grep test.sh root 15037 0,0 0,0 113180 1424 Punkte/0 S 16:10 0:00 /bin/sh ./test.sh root 15045 0,0 0,0 112712 992 Punkte/0 S+ 16:10 0:00 grep --color=auto test.sh Schlag Sie können sehen, dass 15037 Prozesse ausgeführt werden; Wenn Sie das Terminal direkt schließen, wird die Protokollierung beendet, was darauf hinweist, dass die Ausführung des Prozesses beendet wird, wenn die Terminalsitzung endet. Nach wiederholten Tests habe ich jedoch festgestellt, dass, wenn ich den Befehl exit verwende, um das Terminal normal zu verlassen, und mich dann erneut mit dem Terminal verbinde, das mit & ausgeführte Programm weiter ausgeführt wird, d. h. der Befehl & hat denselben Effekt wie nohup. Die Testumgebung, die ich hier verwende, ist CentOS7.6. Verwenden Sie „nohup“ und führen Sie aus [root@localhost test.cc]# nohup ./test.sh > test.log 2>&1 & [1] 14349 Testergebnisse: Schließen Sie das Terminal direkt oder beenden Sie das Terminal mit dem Befehl „exit“. Das Programm wird weiterhin ausgeführt. Ausführen über den Bildschirm # Fensterbildschirm erstellen -S Test # Führen Sie den Befehl aus. Das & am Ende ist nicht erforderlich, aber das Programm belegt das Fenster./test.sh > test.log 2>&1 & # Vorübergehend Strg + Anzeige verlassen Zu diesem Zeitpunkt können Sie das Terminal direkt schließen und dann erneut verbinden. Sie werden feststellen, dass das Programm noch läuft. So finden Sie die Fensterverbindung: # Vorhandenes Fenster [root@localhost ~]# screen -ls Es gibt einen Bildschirm auf: 18048.test (getrennt) 1 Socket in /var/run/screen/S-root. # Öffnen Sie das Fenster [root@localhost ~]# screen -r test Nach dem Eingeben werden Sie feststellen, dass das Fenster immer noch den Status vor dem Verlassen beibehält, einschließlich der zuvor eingegebenen Programme und Befehle. Wenn Sie den Befehl exit in das Fenster eingeben, um das Fenster zu verlassen, wird das Programm beendet, wenn Sie nach dem vorherigen Befehl nicht & verwenden, da dies im Vergleich zum Testfenster ein Vordergrundprogramm ist und das Programm natürlich beendet wird, wenn das Fenster verlassen wird. Aufgrund der temporären Trennfunktion des Bildschirms kann das Vordergrundprogramm im temporären Trennfenster weiter ausgeführt werden. Verglichen mit einem realen Terminal entspricht dies der Ausführung im Hintergrund.
Zusammenfassen Oben ist das vom Herausgeber vorgestellte Beispiel und der Unterschied bei der Verwendung von nohup und screen zum Ausführen von Hintergrundaufgaben in Linux. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: Installations-Tutorial zur komprimierten Version von MySQL 8.0.11
>>: Galeriefunktion durch natives Js implementiert
Die Installation der Dekomprimierungsversion von ...
Inhaltsverzeichnis SSH-Protokoll SSH Verbindungsp...
Einleitung Stellt einige einfache und praktische ...
Im Nginx-Prozessmodell erfordern Aufgaben wie Ver...
Im Vue-Gerüst können wir sehen, dass im neuen Vue...
Installieren Sie MySQL 8.0 docker run -p 63306:33...
Mir sind mehrere Möglichkeiten bekannt, die Ankerp...
1. Daten vorbereiten Die folgenden Operationen we...
Inhaltsverzeichnis 1. Warum Slots verwenden? 1.1 ...
In diesem Artikel wird der spezifische Code von v...
Vertreter / egrep Syntax: grep [-cinvABC] 'wo...
In diesem Artikelbeispiel wird der spezifische Co...
1. CDN Es ist die am häufigsten verwendete Beschl...
<br />Durch die Frame-Struktur ist die gleic...
Vorwort Die MySQL-Datenbanksperre ist ein wichtig...