これは初心者の質問ですが、私はデーモンにとても謝っています。python-daemonでデーモンを設定するにはどうしたらいいですか?
他のいくつかの回答(たとえば、this question)では、人々はpython-daemonパッケージがPEP 3143標準を完全に実装しているために行く方法だと提案しました。
残念ながら、python-daemonはa bit light on documentationです(または、私は知識や経験について少し明るいです...))、私はおそらく本当に基本的なものを見逃していると思います。ここで私がやっているものです:
import daemon
logfile = open('daemon.log', 'w')
context = daemon.DaemonContext(stdout = logfile, stderr = logfile)
context.open()
with context:
do_something_1()
do_something_2()
質問:次の私が持っている
を私のpython-デーモンとデーモンを設定するにはどうすればよい、どのように私はそれを開始し、それを止めることができますか?
サイドノート:
私は基本的に/か.open()
方法は、ここで使用されるべきかについて野生の推測を取っている - ドキュメントはこの時点で本当の明確ではありませんでした。私はそれを含めるかどうかにかかわらず、同じことが起こるようです。
だから私は何をしますか?私は例えば、このファイルを実行しようとすると:
python startConsumerDaemons.py
をdo_something_1()
ではなく、第二の実行に表示されます。そして、端末ウィンドウにが添付されたままになります()。 IEでは、stdoutはリダイレクトされません。ターミナルウィンドウを閉じると、プロセスは強制終了されます。だから、私はここで間違っていると確信しています...どうすれば違うのでしょうか?
最後に、デーモンが実行されると、元のコードに変更を加えた場合など、どのように停止/再開するのですか?
$ ps -x
をし、あなたのデーモンに対応して、ちょうどプロセスをkill PIDを見つける:
行うことになってWITH' '最後は何ですか?(モジュールが最初にインポートされたときにモジュールが実行されますが、何かが欠落していない限り、最後のステートメントは何も行いません)。例外が発生しなかった場合、私は両方がうまく実行されたと確信しています。 – mgibsonbr
"last"とはどういう意味なのか分かりませんが(ただ一つしかありません)、python-daemonのサンプルコードでは、そのようなwith文の中にデーモンとして実行するスクリプトを置きます(http:// www.python.org/dev/peps/pep-3143/)。最初のスクリプトが実行され、メッセージを受信/処理することができます(MQブローカー上のコンシューマー)。おそらくstartConsumerDaemonsスクリプトは決して2番目のスクリプトに到達しません。 – CQP
あなたが投稿した例**は、別のファイル( 'initial_program_setup'、' do_main_program'など)からいくつかのメソッドをインポートし、**それらを 'with_'ステートメント内で**それらを呼び出す( 'do_main_program()') 。私が知りませんPythonのいくつかの曖昧な機能がない限り、私はそれらのステートメントは何もしないと確信しています。とにかく、私が理解できる限り、 'python-daemon'は現在実行中のプログラムをUNIXデーモンプロセスに変え、新しいプロセスや新しいスレッドを作成しません。プログラムの1つの部分が無限ループに入ると、後続の部分はまったく実行されません。 – mgibsonbr