10

我正在尝试使用 start-stop-daemon 启动 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

但我的进程中没有 python 脚本。我做错了什么?

循环.py:

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

2 回答 2

3

我试过你的脚本和命令行,它在我的机器上运行。你确定你的脚本位于/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
于 2011-12-20T16:42:06.830 回答
0

如果您 --exec (或 --startas)一个嵌套的 shell,而不是直接执行 python ,那么您可以在那里进行重定向(根据这个答案):

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"
于 2017-12-06T14:48:37.357 回答