Ich verwende diesen Code, um meine Anwendungen zu dämonisieren. Es erlaubt Ihnen start/stop/restart
das Skript mit den folgenden Befehlen.
python myscript.py start
python myscript.py stop
python myscript.py restart
Darüber hinaus habe ich auch ein init.d-Skript zur Steuerung meines Dienstes. Dadurch können Sie den Dienst automatisch starten, wenn Ihr Betriebssystem hochfährt.
Hier ist ein einfaches Beispiel, um loszulegen. Verschieben Sie einfach Ihren Code in eine Klasse und rufen Sie ihn über run
auf Funktion in MyDeamon
.
import sys
import time
from daemon import Daemon
class YourCode(object):
def run(self):
while True:
time.sleep(1)
class MyDaemon(Daemon):
def run(self):
# Or simply merge your code with MyDaemon.
your_code = YourCode()
your_code.run()
if __name__ == "__main__":
daemon = MyDaemon('/tmp/daemon-example.pid')
if len(sys.argv) == 2:
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.stop()
elif 'restart' == sys.argv[1]:
daemon.restart()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
else:
print "usage: %s start|stop|restart" % sys.argv[0]
sys.exit(2)
Neuling
Wenn Sie ein Betriebssystem ausführen, das Upstart verwendet (z. B. CentOS 6), können Sie den Dienst auch mit Upstart verwalten. Wenn Sie Upstart verwenden, können Sie Ihr Skript unverändert lassen und einfach so etwas unter /etc/init/my-service.conf
hinzufügen
start on started sshd
stop on runlevel [!2345]
exec /usr/bin/python /opt/my_service.py
respawn
Sie können dann start/stop/restart verwenden, um Ihren Dienst zu verwalten.
z. B.
start my-service
stop my-service
restart my-service
Ein ausführlicheres Beispiel für die Arbeit mit Upstart finden Sie hier.
Systemd
Wenn Sie ein Betriebssystem verwenden, das Systemd verwendet (z. B. CentOS 7), können Sie sich die folgende Stackoverflow-Antwort ansehen.
Ich gebe zwei Empfehlungen:
Betreuer
1) Installieren Sie supervisor
Paket (ausführlichere Anweisungen hier):
sudo apt-get install supervisor
2) Erstellen Sie eine Konfigurationsdatei für Ihren Daemon unter /etc/supervisor/conf.d/flashpolicyd.conf
:
[program:flashpolicyd]
directory=/path/to/project/root
environment=ENV_VARIABLE=example,OTHER_ENV_VARIABLE=example2
command=python flashpolicyd.py
autostart=true
autorestart=true
3) Starten Sie supervisor
neu um Ihren neuen .conf
zu laden
supervisorctl update
supervisorctl restart flashpolicyd
systemd (falls derzeit von Ihrer Linux-Distribution verwendet)
[Unit]
Description=My Python daemon
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/project/main.py
WorkingDirectory=/opt/project/
Environment=API_KEY=123456789
Environment=API_PASS=password
Restart=always
RestartSec=2
[Install]
WantedBy=sysinit.target
Platzieren Sie diese Datei in /etc/systemd/system/my_daemon.service
und aktivieren Sie es mit systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block
.
So zeigen Sie Protokolle an:
systemctl status my_daemon