GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ein Python-Programm auch nach dem Abmelden von der SSH-Sitzung weiter ausführen?

Für diese Frage gibt es hier bereits Antworten :Wie hält man Prozesse nach Beendigung der SSH-Sitzung am Laufen?

(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:

  1. Verwenden Sie Terminalemulatoren als tmux und screen :

    • 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.

  2. 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 & oder nohup COMMAND >/dev/null 2>&1 & wenn Sie die von nohup 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 wie nohup 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. Beispielverwendung setsid "COMMAND" . Weitere Beispiele hier.

  3. 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
  4. Verwenden Sie Zeitplanmanager als at und crontab :

    • at – Befehle zu einem späteren Zeitpunkt ausführen; at und batch 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.

  5. 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?
Verwandte:Erfordert die apt-cache-Richtlinie sudo?
Ubuntu
  1. Ssh – Prozesse weiterlaufen lassen, nachdem die Ssh-Sitzung getrennt wurde?

  2. Ssh – Wie erstelle ich einen Prozess, den ich während einer SSH-Sitzung starte, nachdem die Sitzung beendet wurde??

  3. Wie finde ich die Prozess-ID (PID) eines laufenden Terminalprogramms?

  4. CentOS/RHEL – So führen Sie ein Skript oder einen Befehl aus, wenn sich ein Benutzer von der SSH-Sitzung abmeldet

  5. Wie kann ich einen Prozess am Leben erhalten, nachdem ich die Putty-Sitzung geschlossen habe?

Linux-Bildschirmbefehl:Prozesse trotz unterbrochener Verbindung weiterlaufen lassen

Wie lässt man das Gnome-Terminal nach dem Schließen eines Programms geöffnet?

So halten Sie Remote-SSH-Sitzungen nach der Trennung am Laufen

Halten Sie die SSH-Sitzung am Leben

Beenden Sie die Überwachung der Ausgabe eines bestimmten Programms, nachdem Sie den Befehl watch verwendet haben?

Fortsetzen des Befehls, der in einer unterbrochenen SSH-Sitzung ausgeführt wird