启动停止守护进程与Python
我正在尝试用 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