start-stop-daemon и python - PullRequest
       25

start-stop-daemon и python

10 голосов
/ 20 декабря 2011

Я пытаюсь запустить скрипт Python с помощью 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. Что я делаю не так?

loop.py:

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

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Я попробовал ваш скрипт и командную строку, и он работает на моей машине.Вы уверены, что ваш сценарий находится в /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 голосов
/ 06 декабря 2017

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

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