2011-12-20 2 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

答えて

3

私はあなたのスクリプトとコマンドラインを試みたが、それは私のマシンに取り組んでいます。あなたのスクリプトは/home/loop.pyにありますか?

また、-b(バックグラウンド)オプションを指定しているため、これらのプリントが表示されないようにして、プロセスが端末から切り離されていることを確認してください。テストの目的のために-bせずにそれを実行してみてください、その後、あなたは-stdoutオプションでログファイルに標準出力をリダイレクトすることができます:あなた--exec(または--startas)場合、

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を持っていると、それはスタートストップデーモンのこのバージョンではstdoutオプションがないようだ。私はintrestingオプション "-R | --retry がプロセスが消滅しているかどうかをチェックして再試行しました。"もし私が私のスクリプトを殺すなら、それは再びそれを始めるでしょうか?私の例ではこのオプションの使い方を理解できません。 – evg

+0

奇妙ですが、あなたは正しいです。それでは、pythonスクリプトからstdoutに自分自身を書き込まなければなりません: 'import sys; sys.stdout.write(STRING) 'です。 – Chewie

0

よりもむしろ幹部のpython直接そして、あなたは(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" 

これは私の作品と私は出力が(私のスクリプトwasnバッファリングされた実現したら、非常に喜んで私のPythonの標準出力をログに記録します'非常に書く)!私は、デフォルトよりも熱心に出力にフラッシュする「stdbuf」を使用this articleを発見した(ともそれは非常によく説明):

start-stop-daemon --start --background \ 
      --pidfile $PIDFILE --make-pidfile --startas /bin/bash \ 
      -- -c "exec stdbuf -oL -eL $DAEMON $DAEMONARGS > $LOGFILE 2>&1"