Ubuntu 12.04マシンで、upstartスクリプトで制御しているC++アプリサーバーを実行しています。アプリサーバーがクラッシュすると、起動スクリプトが自動的に再起動し、ubuntuマシンが再起動/再起動すると、起動スクリプトがアプリサーバーを再起動します。
以下は私の起動スクリプトです:
start on runlevel [2345]
stop on runlevel [016]
chdir /opt/process/process_server
respawn
post-start script
echo "App server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "Process Started" "[email protected]"
end script
post-stop script
sleep 30
end script
limit core unlimited unlimited
limit nofile 8092 8092
setuid caprti
exec ./process_server --config_file=../config/process.init
奇妙なことに、これは少なくとも2回見られます。ubuntuマシンが再起動されましたが、その方法と実行者はわかりませんが、アプリケーションサーバーがまったく再起動されず、理由もわかりません。私は自分で"Sudo reboot"
と入力して同じボックスを再起動し、これを複数回テストしました。そのマシンが再起動するたびに、アプリサーバーが自動的に再起動するのがわかります。
Ubuntuボックスの再起動中に、上記のupstartスクリプトからアプリサーバーが再起動されないのはどのような場合ですか? Upstartスクリプトに欠けているものはありますか?
また、Upstartスクリプトが前回の再起動中にアプリサーバーを再起動しようとしたが、それが2回発生した場合に何らかの理由で失敗したことを確認するにはどうすればよいですか?
役立つかもしれないいくつかのメモやヒントがあります:
respawn
スタンザには制限を明示的に指定せず、デフォルトがあります。
6.28リスポーン
さらに、ジョブが
respawn limit
スタンザとrespawn
スタンザを指定しない場合、ジョブにはデフォルトの再起動制限が適用されます(respawn limit
を参照)。6.29リスポーン制限
リスポーンには制限があります。ジョブがCOUNT回(INTERVAL秒)以内に再生成される場合、より深い問題があると見なされ、停止されます。デフォルト[〜#〜] count [〜#〜]は10です。デフォルト[〜#〜]間隔[〜#〜]は5です秒。
使用する:
respawn
respawn limit unlimited
upstartスクリプトをデバッグする方法 のようにログを確認します。独自のカスタムログを作成し、pre-start
、post-start
&post-stop
スクリプトを使用して、より具体的な問題を追跡し、RESULT
やPROCESS
などの変数を確認できます。 アップスタート:リスポーンと失敗に関するレポート(メール、ログ)
start on runlevel [2345]
!!!このサービスを開始するために必要な条件はランレベルだけですか?例:そのc ++デーモンはfilesystem
、networking
を必要としますか? を参照してください。Upstartで使用できるイベントは何ですか?
誰かがstart on stopped rc
を使用して各イベントの検索を回避しました、ソース: upstart でリアルタイムの優先順位でjackdを開始します
参照:
デバッグ
デフォルトでは、システムはupstartファイルのログを_
/var/log/upstart
_に保存します。通常は、name_of_upstartfile.logを使用して_/var/log/upstart
_に保存します。 _/var/log/upstart/file.log
_を調べます。ここで、file.logは、initファイル_/etc/init/file.conf
_のログです。 upstartスクリプトで不足しているものを簡単に特定できます。
アップスタートファイルの構文をチェック _init-checkconf /etc/init/file.conf
_またはより多くのデバッグモードで_init-checkconf -d /etc/init/file.conf
_
_start on local-filesystems
_の代わりに_start on runlevel [2345]
_またはstart on (local-filesystems and net-device-up IFACE!=lo)
を使用します。ローカルファイルシステムを必要とするコマンドを実行していて、ネットワークもネットワークを追加するか、他の要件を確認する必要がある場合。まだ問題があり、ログまたはエラーを投稿します。