2011-12-20 225 views
10

我试图启动python脚本启停守护:启动 - 停止守护进程和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

你得到pid文件? – chrisaycock 2011-12-20 16:42:45

回答

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 
+0

它开始适用于我重新启动后,我不知道为什么)我有Ubuntu 11.10,它似乎在这个版本的启动 - 停止守护进程没有标准输出选项。我看到intresting选项“-R | --retry 检查进程是否死机,然后重试。”如果我杀了我的脚本,它会再次启动它?但我不明白如何在我的例子中使用这个选项? – evg 2011-12-20 19:28:41

+0

奇怪,但你是对的。然后你必须从python脚本编写自己的stdout:'import sys; sys.stdout.write函数(STRING)'。 – Chewie 2011-12-20 20:32:24

0

而不是EXEC蟒蛇直接,如果你--exec(或--startas)嵌套外壳,那么你可以做重定向在那里(按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标准输出相当愉快一旦我意识到输出被缓冲(我的剧本WASN “非常写作)!后来我发现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"