2011-12-20 196 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"