2011-12-20 27 views
10

sto cercando di avviare script python con start-stop-daemon:start-stop-daemon e pitone

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 

ma nessuno script python nei miei processi. Cosa faccio di sbagliato?

loop.py:

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

si ottiene il file pid? – chrisaycock

risposta

3

ho provato la linea di sceneggiatura e di comando, e si sta lavorando sulla mia macchina. Sei sicuro che il tuo script si trova a /home/loop.py?

Inoltre, non si aspettano di vedere quelle stampe, perché si specifica l'opzione -b (sfondo), in modo che il processo è stato staccato dal vostro terminale. Provare a eseguire senza l'-b per scopi di test e quindi è possibile reindirizzare lo standard output ad un file di log con l'opzione -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

inizia a funzionare dopo il riavvio, non so perché) ho Ubuntu 11.10 e sembra che non ci sia alcuna opzione di stdout in questa versione di start-stop-daemon. Ho visto l'opzione interessante "-R | --retry controlla se i processi muoiono e riprova." Per esempio se uccido il mio script lo avvierà di nuovo? ma non riesco a capire come usare questa opzione nel mio esempio? – evg

+0

Dispari, ma hai ragione. Quindi dovrai scrivere te stesso allo stdout dallo script python: 'importa sys; sys.stdout.write (STRING) '. – Chewie

0

Piuttosto che exec pitone direttamente, se si --exec (o --startas) un guscio nidificato, allora si può fare il reindirizzamento in là (come da 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" 

Questo funziona per me e registra il mio Python stdout tranquillamente una volta mi sono reso conto l'uscita è stata tamponata (il mio script wasn ' sto scrivendo molto)! Poi ho trovato this article che usa 'stdbuf' per irrigare per l'output più entusiasmo di quello predefinito (e spiega anche abbastanza bene):

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