Start-stop-daemon и python

Я пытаюсь запустить python script с помощью start-stop-daemon:

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

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

loop.py:

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

Ответ 1

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

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

Ответ 2

Вместо того, чтобы выполнять python напрямую, если вы --exec (или --startas) вложенные оболочки, то вы можете сделать перенаправление там (как этот ответ):

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 stdout довольно счастливо, как только я понял, что вывод буферизирован (мой script не писал очень много)! Затем я нашел эту статью, в которой используется "stdbuf", чтобы свести на вывод более нетерпеливо, чем значение по умолчанию (и также объясняет это довольно хорошо):

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