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?
Antworten
Zu viele Anzeigen?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.
Sie können es aufheben, aber ich bevorzuge Bildschirm .
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
.
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.
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.