(14 Antworten)
Vor 3 Jahren geschlossen.
Ich habe ein Python-Skript mit dem Namen scrape.py
. Wie der Name schon sagt, handelt es sich um einen Webcrawler, und ich möchte, dass er kontinuierlich auf meinem Linux-Computer ausgeführt wird, auch nachdem ich mich abgemeldet und die SSH-Sitzung beendet habe. Ich habe hier viel gelesen und es gab viele Vorschläge zur Verwendung von nohup python scrape.py &
. Dies funktionierte gut, aber die Ausführung des Skripts stoppte, sobald ich mich abmeldete. Ich habe auch den supervisor
erkundet Anwendung, aber ich habe keine Root-Berechtigungen, also schlägt es auch fehl. Können Sie mir einen Weg empfehlen, dieses Problem zu lösen? Danke.
Beste Antwort
Es gibt mehrere Ansätze (Werkzeuge und Befehle), die Sie für ähnliche Zwecke verwenden können:
-
Verwenden Sie Terminalemulatoren als
tmux
undscreen
:-
tmux
– Terminal-Multiplexer:Ermöglicht die Erstellung, den Zugriff und die Steuerung einer Reihe von Terminals von einem einzigen Bildschirm aus.tmux
kann von einem Bildschirm getrennt werden und im Hintergrund weiterlaufen, um später wieder angeschlossen zu werden. Beispiele für die grundlegende Verwendung finden Sie hier und hier. -
screen
– Bildschirmmanager mit VT100/ANSI-Terminalemulation. Es ist ein Vollbild-Fenstermanager, der ein physisches Terminal zwischen mehreren Prozessen (normalerweise interaktive Shells) multiplexiert… Programme laufen weiter, wenn ihr Fenster derzeit nicht sichtbar ist und sogar wenn die gesamte Bildschirmsitzung vom Terminal des Benutzers getrennt ist. Beispiel für die Verwendung finden Sie hier.
-
-
Verwenden Sie getrennte Befehle, die im Hintergrund ausgeführt werden (lesen Sie auch):
-
nohup
– Führen Sie einen Befehl aus, der gegen Auflegen immun ist, mit Ausgabe an ein Nicht-TTY; Führen Sie BEFEHL aus und ignorieren Sie Auflegesignale. Die allgemeine Syntax, um einen Befehl in den Hintergrund zu schieben und ihn von der aktuellen Shell-Sitzung zu trennen:nohup COMMAND &
odernohup COMMAND >/dev/null 2>&1 &
wenn Sie die vonnohup
erstellte Info-Datei aussetzen möchten . Beispiele für die grundlegende Verwendung finden Sie hier und hier. Auch hier wird gezeigt, wie man es per ssh-Befehl verwendet. -
disown
– ähnlich wienohup
aber es ist Shell (zsh, ksh, bash) eingebaut; Wird verwendet, um Jobs aus der Job-Tabelle zu entfernen oder um Jobs zu markieren, damit kein SIGHUP-Signal an sie gesendet wird, wenn die übergeordnete Shell es empfängt (z. B. wenn sich der Benutzer abmeldet). Beispiel für die Verwendung finden Sie hier. -
setsid
– erstellt eine Sitzung und setzt die Prozessgruppen-ID. Beispielverwendungsetsid "COMMAND"
. Weitere Beispiele hier.
-
-
Verwenden Sie den
huponexit
Bash-Option:$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exit
Referenz:
- So verwenden Sie die Jobsteuerung von Bash, um Vorder- und Hintergrundprozesse bei DigitalOcean zu verwalten
-
Verwenden Sie Zeitplanmanager als
at
undcrontab
:-
at
– Befehle zu einem späteren Zeitpunkt ausführen;at
undbatch
Befehle von der Standardeingabe oder einer angegebenen Datei lesen, die zu einem späteren Zeitpunkt ausgeführt werden sollen, mit/bin/sh
. Verwendungsbeispiel:echo "COMMAND" | at now + 1 minute
. Weitere Beispiele hier. -
crontab
– regelmäßige Hintergrundarbeit planen; Es ist für andere Zwecke bekannt, aber Sie können einen bestimmten Zeitpunkt festlegen, an dem Ihr Befehl nur einmal ausgeführt wird. Ein netter Crontab-Rechner wird hier zur Verfügung gestellt.
-
-
Systemdienst erstellen und starten, siehe:
- Wie führe ich einen einzelnen Befehl beim Start mit systemd aus?
- Wie führe ich Skripte beim Start aus?