2013-07-19 8 views
34

私はPythonでモジュールを書いており、一度起動すると一度起動して他のモジュールを更新する必要があるときに停止する必要があります。モジュールがクラッシュしたり、そうでなければ実行されていない場合、私はおそらくそれを再起動するためにmonitを使用しています。デーモンとPythonスクリプトのアップスタート

私はDaemon,Upstartなど多くのテクニックを使いました。

私はすべての新しいモジュールを使い、永遠にそれらを実行し続けるために、そのアプローチを使用するためにはどの方法が最適ですか?

答えて

67

あなたがUpstartに言及したことから、私はこの質問がUbuntuサーバー上で実行されているサービスであると仮定します。

Ubuntuサーバーでは、アップスタートジョブは、適切なタイミングで起動し、使い慣れたコマンドで停止または再ロードすることができる常時サービスを作成するための実際の最も簡単で便利なオプションです。

アップスタートサービスを作成するには、/etc/initに1つのファイルを追加する必要があります。 <service-name>.confと呼ばれます。スクリプトの例は次のようになります。

description "My chat server" 
author "[email protected]" 

start on runlevel [2345] 
stop on runlevel [!2345] 

env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set 

respawn 

exec /srv/applications/chat.py 

これは毎回マシンはそれがchat.pyプログラムを起動します開始されていることを意味します。それが何らかの理由で死亡した場合は、それが再開されます。ダブルフォークやコードのデーモン化を心配する必要はありません。それは新興企業によってあなたのために処理されます。

あなたのプロセスを停止または開始したい場合は、

service chat start 
service chat stop 

とその名前chatを行うことができますが自動的に/etc/init

.confファイルの名前から発見された私はカバーしていますここで新興の基礎。それをさらに便利にするための多くの他の機能があります。すべてman upstartを実行して利用可能です。

この方法は、独自のデーモン化コードを書くよりはるかに便利です。組み込みのUbuntuコンポーネント用の4-8行の設定ファイルは、コードを安全に二重フォークにしてから別のプロセスで監視して、遠ざけていないことを確認するよりもはるかにエラーが発生しにくいです。

Monitは少し赤いニシンです。ダウンタイムアラートが必要な場合は、別のサーバーで監視プログラムを実行する必要があります。プロセスを常にサーバー上で実行し続けるためには、新興企業に依頼してください。次に、サーバーが実際に稼動していることを確認する別のサービスを用意します。ダウンタイムはさまざまな理由で発生します。同じサーバー上で実行されているプロセスは、サーバー自体がダウンした場合には何も正確に知らせません。その状態について警告するために、別のマシン(またはpingdomのようなサードパーティーのプロバイダ)が必要です。

+0

あなたの答えをサポートする正体はありますか? Ubuntuで実行することはオプションですが、強制的ではありません(デーモンは両方で動作します)。 ダウンタイムのアラートを取得するには、アップスタートでもmonitを使用する必要があります。 – mtariq

+0

停止/開始時にupstartを電子メールで送信できます(http://serverfault.com/questions/236925/how-can-i-receive-an-email-when-an-upstart-monitored-script-respawns) 。本物の源?人々はあらゆる場所で生産を開始しています。本番環境ではupstartを使用します。ダウンタイムアラートにはmonitを使用できません。それは無意味です。理由を編集した回答を参照してください。 – aychedee

+0

グレートポスト。 UpstartはDebianツリーにありますので、おそらくvanilla debianやMintなどの他の派生物で使うことができます。 – meawoppl

3

私はあなたがsupervisorをチェックアウトすることができ/etc/init.dの

5

でSKELでスタート・ストップ・デーモンutility.Lookと古いスタイルのinitスクリプトを使用していました。それが可能なことは、システムの起動時にプロセスを開始し、シャットダウンするまでプロセスを起動させることです。

最も簡単な設定ファイルは次のようになります。

[program:my_script] 
command = /home/foo/bar/venv/bin/python /home/foo/bar/scripts/my_script.py 
environment = MY_ENV_VAR=FOO, MY_OTHER_ENV_VAR=BAR 
autostart = True 
autorestart = True 

次にあなたが上司の管理コンソールを入力するsudo supervisorctlを実行し、/etc/supervisord/conf.dにリンクでき、rereadでタイプがようスーパーバイザは新しいを表示するには、新しいconfigエントリとupdateに気付きstatusリストのプログラム

プログラムを起動/再起動/停止するには、sudo supervisorctl start/restart/stop my_scriptを実行します。

+0

スーパーバイザーがPython 3で動作しないという一般的な注意を読者に示します。 – shongololo

関連する問題