2011-12-20 16 views
10

estoy tratando de iniciar un script en Python con start-stop-daemon:start-stop-daemon y Python

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose 

pero ningún script en Python en mis procesos. ¿Qué hice mal?

loop.py:

import time 
while True: 
    print "working..." 
    time.sleep(3) 
+0

se obtiene el archivo pid? – chrisaycock

Respuesta

3

que intentó su línea de guión y de comandos, y está trabajando en mi máquina. ¿Estás seguro de que tu script se encuentra en /home/loop.py?

Además, no espere ver esas impresiones, porque está especificando la opción -b (fondo), por lo que el proceso se desconectará de su terminal. Intenta ejecutarlo sin la -b para propósitos de prueba y luego se puede redirigir la salida estándar a un archivo de registro con la opción -stdout:

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose -stdout /var/log/loop.log 
+0

me funciona después de reiniciar, no sé por qué) Tengo ubuntu 11.10 y parece que no hay una opción estándar en esta versión de start-stop-daemon. Vi la opción interesante "-R | --retry comprobar si los procesos se mueren, y volver a intentarlo". Por ejemplo, si elimino mi script, ¿lo volveré a iniciar? pero no puedo entender cómo usar esta opción en mi ejemplo? – evg

+0

Impar, pero tienes razón. Luego tendrá que escribir en stdout desde el script de python: 'import sys; sys.stdout.write (STRING) '. – Chewie

0

En lugar de pitón Exec directamente, si --exec (o --startas) una concha anidada, entonces usted puede hacer el cambio de dirección en ese país (según this answer):

start-stop-daemon --start --quiet --chuid $DAEMONUSER \ 
--make-pidfile --pidfile $PIDFILE --background  \ 
--startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1" 

Esto funciona para mí y registra mi salida estándar Python absolutamente feliz una vez que me di cuenta de la salida se reguló (mi guión no estaba ' t escribiendo mucho)! Entonces, encontré this article que utiliza 'stdbuf' para limpiar a la salida con más ganas que el valor predeterminado (y también lo explica bastante bien):

start-stop-daemon --start --background \ 
      --pidfile $PIDFILE --make-pidfile --startas /bin/bash \ 
      -- -c "exec stdbuf -oL -eL $DAEMON $DAEMONARGS > $LOGFILE 2>&1"