Script im Hintergrund starten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Moneyman
User
Beiträge: 8
Registriert: Dienstag 12. Juni 2012, 10:02

Mittwoch 13. Juni 2012, 09:04

Hallo liebe Python Fans,

Mein Problem ist Folgendes:
Ich möchte mein Skript im Hintergrund laufen lassen und das auf Linux und Windows. Wichtig ist dabei, dass wenn ich mich per SSH Verbindung abmelde, das Skript weiter im Hintergrund läuft.

Skript:
Es geht dabei um ein Script welches Informationen von Druckern abfragt und in eine Datenbank schreibt. Dieses Skript befindet sich auf einem Server und soll 24/7 laufen.

Mir ist bekannt, dass auf Linux durch Anhängen von '&' an den Skriptnamen, das Skript im Hintergrund läuft, aber auch nachdem ich mich wieder abgemeldet habe? Im Internet ist leider von Beidem die rede.
Ich wurde ebenfalls auf das Modul subprocess verwiesen. Wenn ich dort aber ein Subprozess starte ist er nur so lange aktiv, wie das Skript gestartet ist. Das bringt mir aber wenig, weil das Skript mit dem ich den Subprozess erstelle nun angezeigt wird.

Wie schaffe ich es also mit möglichst keinem extra Modul, das Skript beim Aufrufen sofort in den Hintergrund zu stellen?

Vielen Dank schonmal!
deets

Mittwoch 13. Juni 2012, 09:09

Das Problem heisst unter Linux "daemonisieren", und kann hiermit geloest werden:

http://pypi.python.org/pypi/python-daemon/

Und fuer Windows musst du einen Service schreiben. Gab's auch hier schonmal nen Thread zu:

http://www.python-forum.de/viewtopic.php?p=52866
Moneyman
User
Beiträge: 8
Registriert: Dienstag 12. Juni 2012, 10:02

Mittwoch 13. Juni 2012, 09:16

Vielen dank für die beiden Links. Ich hatte vielleicht gehofft es ohne externe Module zum laufen zu bringen, da habe ich mich dann wohl geirrt. Dann werd ich es mal umsetzen.
Benutzeravatar
/me
User
Beiträge: 3361
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Mittwoch 13. Juni 2012, 09:41

Moneyman hat geschrieben:Mir ist bekannt, dass auf Linux durch Anhängen von '&' an den Skriptnamen, das Skript im Hintergrund läuft, aber auch nachdem ich mich wieder abgemeldet habe?
Für Linux kannst du nohup verwenden.

Code: Alles auswählen

nohup python script.py parameter &
Zusätzlich solltest du vielleicht noch die Standard- und Fehlerausgaben in eine Datei umleiten. Wenn du sie einfach in den Orkus schicken willst, dann mach es so:

Code: Alles auswählen

nohup python script.py parameter > /dev/null 2> /dev/null &
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Mittwoch 13. Juni 2012, 09:58

/me hat geschrieben:Für Linux kannst du nohup verwenden.

Code: Alles auswählen

nohup python script.py parameter &
Alternativ kannst du auch selbst SIGTERM ignorieren:

Code: Alles auswählen

import signal

signal.signal(signal.SIGTERM, signal.SIG_IGN)
Die Dokumentation sagt, dass es auch fuer andere Platformen als Unix unterstuetzt wird. Trotzdem wuerde ich das mal unter Windows testen.
Antworten