2011-12-20 2 views
10

Я пытаюсь начать питон скрипт с старт-стоп-демона:старт-стоп-демон и питон

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 

но не питон скрипт в моих процессах. Что я делаю неправильно?

loop.py:

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

вы получите файл Pid ли? – chrisaycock

ответ

3

Я попробовал ваш скрипт и командную строку, и он работает на моей машине. Вы уверены, что ваш скрипт находится по адресу /home/loop.py?

Кроме того, не ожидайте увидеть эти отпечатки, потому что вы указываете опцию -b (фон), поэтому процесс отсоединяется от вашего терминала. Попробуйте запустить его без -b для целей тестирования, а затем вы можете перенаправить стандартный вывод в лог-файл с -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

он начинает работать для меня после перезагрузки, я не знаю, почему) У меня есть Ubuntu 11.10, и кажется, что здесь нет опции stdout в этой версии start-stop-daemon. Я видел интересный вариант «-R | --retry проверить, умирают ли процессы, и повторите попытку». Для ex, если я убью свой скрипт, он запустит его снова? но я не могу понять, как использовать этот параметр в моем примере? – evg

+0

Странно, но ты прав. Тогда вам придется писать себя в stdout из скрипта python: 'import sys; sys.stdout.write (СТРОКА) '. – Chewie

0

Вместо Exec питона напрямую, если вы --exec (или --startas) вложенная оболочка, то вы можете сделать перенаправление там (согласно 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" 

Это работает для меня и записывает мой Python стандартного вывод вполне счастливо однажды я понял, что выход был буферным (мой сценарий WASN ' я пишу очень)! Затем я нашел this article, который использует «stdbuf» промывать к выходу более усердия, чем по умолчанию (а также объясняет это довольно хорошо):

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