J'utilise ce code pour démoniser mes applications. Il vous permet start/stop/restart
le script à l'aide des commandes suivantes.
python myscript.py start
python myscript.py stop
python myscript.py restart
En plus de cela, j'ai également un script init.d pour contrôler mon service. Cela vous permet de démarrer automatiquement le service au démarrage de votre système d'exploitation.
Voici un exemple simple pour vous lancer. Déplacez simplement votre code à l'intérieur d'une classe et appelez-le depuis le run
fonction à l'intérieur de 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)
Début
Si vous utilisez un système d'exploitation qui utilise Upstart (par exemple CentOS 6), vous pouvez également utiliser Upstart pour gérer le service. Si vous utilisez Upstart, vous pouvez conserver votre script tel quel et ajouter simplement quelque chose comme ceci sous /etc/init/my-service.conf
start on started sshd
stop on runlevel [!2345]
exec /usr/bin/python /opt/my_service.py
respawn
Vous pouvez ensuite utiliser start/stop/restart pour gérer votre service.
ex.
start my-service
stop my-service
restart my-service
Un exemple plus détaillé de travail avec upstart est disponible ici.
Systemd
Si vous utilisez un système d'exploitation qui utilise Systemd (par exemple CentOS 7), vous pouvez consulter la réponse Stackoverflow suivante.
Je propose deux recommandations :
superviseur
1) Installez le supervisor
package (instructions plus détaillées ici) :
sudo apt-get install supervisor
2) Créez un fichier de configuration pour votre démon à /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) Redémarrez supervisor
pour charger votre nouveau .conf
supervisorctl update
supervisorctl restart flashpolicyd
systemd (si actuellement utilisé par votre distribution Linux)
[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
Placez ce fichier dans /etc/systemd/system/my_daemon.service
et activez-le en utilisant systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block
.
Pour afficher les journaux :
systemctl status my_daemon