162 Stimmen

Wie kann ich ein Skript im Hintergrund laufen lassen, auch wenn ich mich über SSH abmelde?

Ich habe ein Python-Skript bgservice.py und ich möchte, dass es ständig läuft, da es Teil des von mir erstellten Webdienstes ist. Wie kann ich es kontinuierlich laufen lassen, auch wenn ich mich über SSH abmelde?

15voto

Dustin Kirkland Punkte 5103

Sie könnten erwägen, Ihr Python-Skript in einen richtigen Python-Daemon zu verwandeln, wie beschrieben aquí .

python-daemon ist ein gutes Werkzeug, um Python-Skripte als Daemon-Prozess im Hintergrund laufen zu lassen, anstatt ein ständig laufendes Skript. Sie müssen bestehenden Code ein wenig ändern, aber es ist schlicht und einfach.

Wenn Sie Probleme mit python-daemon haben, gibt es ein weiteres Dienstprogramm Aufsichtsperson die dasselbe für Sie tun wird, aber in diesem Fall müssen Sie keinen Code schreiben (oder vorhandenen ändern), da dies eine Standardlösung für die Daemonisierung von Prozessen ist.

8voto

Randy Proctor Punkte 7048

Sie können es aufheben, aber ich bevorzuge Bildschirm .

6voto

Chouettou Punkte 651

Hier ist eine einfache Lösung in Python unter Verwendung eines Dekorators:

import os, time

def daemon(func):
    def wrapper(*args, **kwargs):
        if os.fork(): return
        func(*args, **kwargs)
        os._exit(os.EX_OK)
    return wrapper

@daemon
def my_func(count=10):    
  for i in range(0,count):
     print('parent pid: %d' % os.getppid())
     time.sleep(1)

my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own

Sie können natürlich den Inhalt Ihrer bgservice.py Datei anstelle von my_func .

5voto

Sushil Verma Punkte 559

Versuchen Sie dies:

nohup python -u <your file name>.py >> <your log file>.log &

Sie können den obigen Befehl in Bildschirm und aus dem Bildschirm herauskommen.

Jetzt können Sie die Protokolle Ihres Python-Skripts verfolgen, indem Sie: tail -f <your log file>.log

Um Ihr Skript zu beenden, können Sie Folgendes verwenden ps -aux y töten Befehle.

3voto

jonescb Punkte 20889

En zsh Shell hat die Option, alle Hintergrundprozesse mit nohup laufen zu lassen.

Unter ~/.zshrc fügen Sie die Zeilen hinzu:

setopt nocheckjobs  #don't warn about bg processes on exit
setopt nohup        #don't kill bg processes on exit

Dann müssen Sie nur einen Prozess wie diesen ausführen: python bgservice.py & und Sie brauchen den Befehl nohup nicht mehr zu verwenden.

Ich weiß, dass nicht viele Leute zsh benutzen, aber es ist eine wirklich coole Shell, die ich empfehlen würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X