私はモジュールをPythonで記述し、開始したら連続して実行し、他のモジュールを更新する必要がある場合は停止する必要があります。モジュールがクラッシュしたか、実行されていません。
Daemon 、 pstart などのさまざまなテクニックを試していました。
すべての新しいモジュールを通してそのアプローチを使用して、それらを永久に実行し続けるための最良の方法はどれですか?
Upstartについての言及から、この質問はUbuntuサーバーで実行されているサービスに関するものだと思います。
Ubuntuサーバーでは、スタートアップジョブは、適切なタイミングで起動し、使い慣れたコマンドで停止またはリロードできる常時オンサービスを作成するための最も簡単で便利なオプションです。
Upstartサービスを作成するには、/etc/init
に単一のファイルを追加する必要があります。 <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
は、.conf
内の/etc/init
ファイルの名前から自動的に検出されます
ここでは、新興企業の基本についてのみ説明します。さらに便利にするための機能は他にもたくさんあります。すべてはman upstart
を実行することで利用できます。
この方法は、独自のデーモン化コードを書くよりもはるかに便利です。組み込みのUbuntuコンポーネントの4〜8行の構成ファイルは、コードを安全にダブルフォークし、別のプロセスでそれを監視して消失しないようにするよりもエラーが少なくなります。
Monitは少しニシンです。ダウンタイムアラートが必要な場合は、とにかくseparateサーバーで監視プログラムを実行する必要があります。プロセスを常にサーバーで実行し続けるには、upstartに依存します。次に、サーバーが実際に実行されていることを確認する別のサービスを用意します。ダウンタイムはさまざまな理由で発生します。同じサーバーで実行されているプロセスは、サーバー自体がダウンした場合、正確には何も通知しません。その状態を警告するには、別のマシン(またはpingdomなどのサードパーティプロバイダー)が必要です。
supervisor を確認できます。できるのは、システムの起動時にプロセスを開始し、シャットダウンするまでそれを維持することです。
最も単純な構成ファイルは次のとおりです。
[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
次に、それを/etc/supervisord/conf.d
にリンクし、Sudo supervisorctl
を実行してスーパーバイザーの管理コンソールに入り、スーパーバイザーが新しい設定エントリに気づくようにreread
を入力し、update
に新しいプログラムを表示しますstatus
リスト。
プログラムを開始/再起動/停止するには、Sudo supervisorctl start/restart/stop my_script
を実行できます。
古いスタイルのinitscriptをstart-stop-daemonユーティリティで使用しました。/etc/init.dのskelを見てください