Bonjour,
J'essaie de laisser un python script s'exécuter en tant que service (daemon) sur (ubuntu) linux.
Sur le web, il existe plusieurs solutions comme :
http://pypi.python.org/pypi/python-daemon/
Un processus de démon Unix qui se comporte bien est difficile à mettre en place, mais les étapes requises sont pratiquement les mêmes pour tous les programmes de démon. Une instance DaemonContext contient le comportement et l'environnement de processus configuré pour le programme ; utilisez l'instance comme gestionnaire de contexte pour entrer dans un état de démon.
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
Cependant comme je veux intégrer mon script python spécifiquement avec ubuntu linux ma solution est une combinaison avec un script init.d.
#!/bin/bash
WORK_DIR="/var/lib/foo"
DAEMON="/usr/bin/python"
ARGS="/opt/foo/linux_service.py"
PIDFILE="/var/run/foo.pid"
USER="foo"
case "$1" in
start)
echo "Starting server"
mkdir -p "$WORK_DIR"
/sbin/start-stop-daemon --start --pidfile $PIDFILE \
--user $USER --group $USER \
-b --make-pidfile \
--chuid $USER \
--exec $DAEMON $ARGS
;;
stop)
echo "Stopping server"
/sbin/start-stop-daemon --stop --pidfile $PIDFILE --verbose
;;
*)
echo "Usage: /etc/init.d/$USER {start|stop}"
exit 1
;;
esac
exit 0
et en python :
import signal
import time
import multiprocessing
stop_event = multiprocessing.Event()
def stop(signum, frame):
stop_event.set()
signal.signal(signal.SIGTERM, stop)
if __name__ == '__main__':
while not stop_event.is_set():
time.sleep(3)
Ma question est maintenant de savoir si cette approche est correcte. Dois-je gérer des signaux supplémentaires ? Sera-t-il un "processus démon Unix bien élevé" ?