Daemonizing ein python-Skript im debian mit virtualenv
Ich habe gesehen, eine Menge von Skripten für daemonizing ein python-Skript in linux, aber nicht viel Informationen darüber, wie Sie zu verwenden sind. Könnte jemand mich leiten auf diesem?
Moment habe ich einen langen python-Skript lauscht auf einem sockel für eine eingehende Nachricht, wenn es das richtige format akzeptiert es und speichert es dann in die Datenbank. Das Skript selbst nur öffnet den socket und hört dann auf einer while-true (, die nicht den job!) und alle arbeiten dort.
Zu daemonize es, würde ich ändern, meine aktuelle Skript oder rufen Sie es aus einem separaten Skript? Ich habe schon Beispiele gesehen, aber beide kamen weder zur Arbeit.
Auch, ich bin mit virtualenv, das könnte die Ursache meiner Probleme, irgendwelche Hinweise auf die Verwendung dieser mit daemonisierte scripts?
- ein daemon ist einfach nur ein Programm/Skript, das ständig läuft, bis ein Ereignis passiert, und wenn kein Ereignis Eintritt (oder in der Warteschlange), es wird Platz für eine gewisse Zeit... dann wiederholen.... Was Sie tun IST, was ein Dämon tut. Fragen Sie, um Sie zu starten mit der Umwelt, so dass es immer ausgeführt wird?
- Ich brauche verschiedene Dinge, die installiert sind in virtualenv verwendet werden, die durch das Skript. Ich denke, das ist, warum ich habe Sie nicht bekommen, es funktioniert noch. Auch wie weiß ich, dass es läuft? Ich habe gelesen, über den Aufruf
ps aux
zeigen eine Liste aber ich kann nicht sehen es dort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie ein shell-Skript für die Aktivierung der virtuellen Umgebung, und läuft dein Python-Skript im hintergrund.
Außerdem sollte es durch ein python-Modul in der virtuellen Umgebung, die Sie importieren und aktivieren Sie die Umgebung aus zu. Ich habe nicht virtualenv, das im Augenblick arbeitet, so kann ich nicht überprüfen, wo es ist, aber die Suche nach
activate
(oder etwas ähnliches) in der virtuellen Umgebung, und Sie sollten es finden.Edit: Hinzugefügt eine minimale Debian-init.d Skript
Den absoluten minimal-Skript benötigt, um zu starten ein daemon, wenn der computer startet, ist diese:
Den
&
macht das Programm im hintergrund laufen, also es wird nicht aufhören, den rest der boot-Prozess.Für eine vollständige Skript, kopieren Sie
/etc/init.d/skeleton
und Bearbeiten Sie die neue Datei. Der wichtige Teil zum Bearbeiten wird der block am Anfang (zwischen### BEGIN INIT INFO
und### END INIT INFO
, die durch dieupdate-rc.d
- Programm), und dieNAME
,DAEMON
undDAEMON_ARGS
Variablen. Hoffentlich, dass sollten alle sein, die benötigt, für ein startup-script.Aktivieren Sie das Skript wie dieses:
Und starten Sie es:
Den
<name of script>
ist nur der name, nicht der vollständige Pfad.man update-rc.d
, wenn die manual-Seite vorhanden ist, sollte es enthalten Hinweise, wie es zu tun. Versuchen Sie auch google fürstartup script _linuxdist_
.sh
Skript gestartet werden konnte (mit&
) aber dann wird es getötet, wenn das terminal-Fenster schließt sich.Wenn Sie brauchen, um eine Anwendung auszuführen, die in einem python-virtualenv, können Sie entweder "aktivieren" der virtualenv, oder verwenden Sie diese Umgebung ist einzigartig
python
Befehl.Gemäß der website "Wenn Sie direkt ein Skript ausführen oder den python-interpreter von der virtualenv bin/- Verzeichnis (z.B. Pfad/zu/env/bin/pip-oder /Pfad/zu/env/bin/python script.py) es gibt keine Notwendigkeit für die Aktivierung." - http://pypi.python.org/pypi/virtualenv
Ich habe auch einige python-Module, die zusammengestellt wurden von der Quelle. Diese müssen in der PYTHONPATH-Umgebungsvariable. Das könnte ein Teil Ihrer virtualenv Aktivierung erfolgt mit virtualwrapper, oder explizit genannt (wie ich unten).
Aufruf des Programms von einem UPSTART-job so gut funktioniert. Mein Beispiel ist oben.
Auf einem Ubuntu-10.10-Instanz auf Amazon EC2, ich hatte mehr Glück mit dem start-stop-daemon Befehl.
Ich kämpfte auch mit einigen der anderen Schnösel 'Strophen.' Ich bin Aufruf einer python-Anwendung mit einem bestimmten virtualenv und einige Parameter an mein Programm ausgeführt.