Seite 1 von 1

Script im Hintergrund starten

Verfasst: Mittwoch 13. Juni 2012, 09:04
von Moneyman
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!

Re: Script im Hintergrund starten

Verfasst: Mittwoch 13. Juni 2012, 09:09
von deets
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

Re: Script im Hintergrund starten

Verfasst: Mittwoch 13. Juni 2012, 09:16
von Moneyman
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.

Re: Script im Hintergrund starten

Verfasst: Mittwoch 13. Juni 2012, 09:41
von /me
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 &

Re: Script im Hintergrund starten

Verfasst: Mittwoch 13. Juni 2012, 09:58
von cofi
/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.