Python Scrypt als Daemon im Hintergrund?

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
kromonos
User
Beiträge: 34
Registriert: Freitag 9. Januar 2009, 02:37
Wohnort: Trier
Kontaktdaten:

Ist es möglich, ein Python Script unter Linux als Daemon im hintergrund laufen zu lassen? .. Bzw. ein Script so zu schreiben, dass es sich selbt, wie z.B. der eggdrop Bot, in den Hintergrund läd?

Ich bastel da nämlich an einem MUC Bot, der in Python geschrieben ist. Allerdings muss ich den entweder immer in einem Screen aufrufen oder auf einer anderen tty Konsole und die dann eingeloggt lassen -.- Und das nervt mich auf dauer doch ein wenig ..
xmpp:kromonos@user-helfen-usern.de
HomePage/IT-Forum: http://www.user-helfen-usern.de
dev
User
Beiträge: 49
Registriert: Montag 23. Januar 2006, 09:52
Kontaktdaten:

kromonos hat geschrieben:Ist es möglich, ein Python Script unter Linux als Daemon im hintergrund laufen zu lassen?
http://pypi.python.org/pypi/bda.daemon/1.1.1

http://twistedmatrix.com/trac/browser/t ... ix.py#L156

Ciao,
dev
kromonos
User
Beiträge: 34
Registriert: Freitag 9. Januar 2009, 02:37
Wohnort: Trier
Kontaktdaten:

Danke für die antwort dev ..
Ich werds mir auch direkt mal angucken ^^
xmpp:kromonos@user-helfen-usern.de
HomePage/IT-Forum: http://www.user-helfen-usern.de
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Oder auch http://code.activestate.com/recipes/66012/ , mit Erklärungen
kromonos
User
Beiträge: 34
Registriert: Freitag 9. Januar 2009, 02:37
Wohnort: Trier
Kontaktdaten:

Darii hat geschrieben:Oder auch http://code.activestate.com/recipes/66012/ , mit Erklärungen
Sehr schön :)
Das hilft mir sehr gut weiter :)
xmpp:kromonos@user-helfen-usern.de
HomePage/IT-Forum: http://www.user-helfen-usern.de
lunar

Du solltest die Kommentare beachten. Für einen einfachen Dienst benötigt man den doppelten Fork nicht, das Schließen der Standarddatenströme dagegen ist durchaus empfehlenswert, wird aber erst in den Kommentaren erwähnt.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi, ich möchte das Thema nochmal ausgraben, weil ich gerade etwas ähnliches machen möchte. Und zwar möchte ich ein Python Script schreiben, das als normaler Dienst unter Linux läuft, den man mit start, stop, restart usw steuern kann.

Ich weiß bisher nur, dass man dafür ein Script verwendet und das man ein Beispiel dafür unter /etc/init.d/skeleton findet. Ich bin aber noch nicht dahinter gekommen, wie man das Python Script entsprechend programmieren muss und wie man das Skeleton anpassen muss

Hat da jemand vielleicht sogar ein Beispiel?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also unter Debian läuft das alles durch ``start-stop-daemon``, und da muss man optimalerweise eine PID-Datei schreiben, und auf ein paar Signale reagieren (SIGTERM, SIGHUP) und das ist eigentlich auch schon alles damit ein Daemon mit dem init-System zusammenspielt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hm, läuft das unter Suse/Red Hat anders? Dachte, das wäre einheitlich unter Linux
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Da ``start-stop-daemon`` ein Debian-spezifisches Tool ist, wird das wohl woanders leicht unterschiedlich sein (die grobe Essenz des SysV Init Systems bleibt natürlich die gleiche).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Ok, das heißt, dass das oben beschriebene System für Linux im allgemeinen gilt. Nur die Steuerung des start-stop-deamon ist Debian spezifisch
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ok, das heißt, dass das oben beschriebene System für Linux im allgemeinen gilt. Nur die Steuerung des start-stop-deamon ist Debian spezifisch
Genau, Grundgerüst ist quasi dasselbe (Skripte in /etc/init.d, symlinks unter rcX.d je nach Start-/Stoppriorität und runlevel), Unterschiede liegen dann im Detail:
  • SuSE/RedHat haben versucht, das zu standardisieren, daher unterliegt das Skript gewissen Konventionen im oberen Kommentarteil (Teil der LSB-Spec), wird aber inzwischen von den großen Distributionen und deren Dienstetools ebenfalls beachtet (siehe INIT INFO Sektion)
  • SuSEnahe haben unter den rc-Ordnern getrennte Start-/Stoplinks, Debianabkömmlinge kennen nur einen Link und lösen das über die INIT INFO auf
  • SuSE legt unter /usr/sbin symlinks zu den Skripten an (rcNameDesSkriptes), ist z.T. für frühe Dienste Pflicht (wegen Mountstatus des root-FS, weiß nicht mehr genau, was da war)
Für SuSE würde ich ausgehend vom Skeleton das Skript schreiben. Hast Du hier alle Abhängigkeiten richtig eingetragen, kümmert sich 'insserv' um die Erstellung der ganzen Symlinks und die Start-/Stopreihenfolge.

Ubuntu will mit upstart das SysV-Init-Modell ganz verlassen, nutzt es derzeit aber immernoch (innerhalb von upstart).
Antworten