我正在尝试使用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)
答案 0 :(得分: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
答案 1 :(得分:0)
如果您--exec(或--startas)嵌套shell ,而不是直接执行python,那么您可以在那里进行重定向(根据this answer):< / p>
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 !然后我发现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"