【问题标题】:start-stop-daemon and python启动-停止-守护进程和 python
【发布时间】:2012-01-24 14:28:08
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 你得到 pid 文件了吗?

标签: python cron start-stop-daemon


【解决方案1】:

我试过你的脚本和命令行,它在我的机器上运行。你确定你的脚本位于/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

【讨论】:

  • 它在重新启动后开始对我有用,我不知道为什么)我有 ubuntu 11.10,而且在这个版本的 start-stop-daemon 中似乎没有 stdout 选项。我看到了有趣的选项“-R|--retry 检查进程是否死亡,然后重试。”例如,如果我杀死我的脚本,它会再次启动它吗?但我不明白如何在我的示例中使用此选项?
  • 奇怪,但你是对的。然后,您必须将自己从 python 脚本写入标准输出:import sys; sys.stdout.write(STRING)
【解决方案2】:

而不是直接执行python,如果你--exec(或--startas)一个嵌套的shell,那么你可以在那里进行重定向(根据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 标准输出一旦我意识到输出被缓冲(我的脚本写得不多)!然后我发现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"

【讨论】:

    最近更新 更多