启动停止守护进程与Python

10 投票
2 回答
7230 浏览
提问于 2025-04-17 08:43

我正在尝试用 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 脚本。我哪里做错了呢?

这是我的 loop.py 脚本:

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

2 个回答

0

与其直接执行 Python,不如使用 --exec(或 --startas)来启动一个 嵌套的 shell,这样你就可以在里面进行重定向(就像 这个回答所说的那样):

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"
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

撰写回答