web-dev-qa-db-ja.com

upstartスクリプトを通じてアプリサーバーを自動的に再起動します

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回発生した場合に何らかの理由で失敗したことを確認するにはどうすればよいですか?

1
david

役立つかもしれないいくつかのメモやヒントがあります:

  • respawn スタンザには制限を明示的に指定せず、デフォルトがあります。

    6.28リスポーン

    さらに、ジョブがrespawn limitスタンザとrespawnスタンザを指定しない場合、ジョブにはデフォルトの再起動制限が適用されます(respawn limitを参照)。

    6.29リスポーン制限

    リスポーンには制限があります。ジョブがCOUNT回INTERVAL秒)以内に再生成される場合、より深い問題があると見なされ、停止されます。デフォルト[〜#〜] count [〜#〜]10です。デフォルト[〜#〜]間隔[〜#〜]5です秒。

    使用する:

    respawn 
    respawn limit unlimited
    
  • upstartスクリプトをデバッグする方法 のようにログを確認します。独自のカスタムログを作成し、pre-startpost-startpost-stopスクリプトを使用して、より具体的な問題を追跡し、RESULTPROCESSなどの変数を確認できます。 アップスタート:リスポーンと失敗に関するレポート(メール、ログ)

  • start on runlevel [2345] !!!このサービスを開始するために必要な条件はランレベルだけですか?例:そのc ++デーモンはfilesystemnetworkingを必要としますか? を参照してください。Upstartで使用できるイベントは何ですか?

    誰かがstart on stopped rcを使用して各イベントの検索を回避しました、ソース: upstart でリアルタイムの優先順位でjackdを開始します

参照:

1
user.dz

デバッグ

デフォルトでは、システムは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)を使用します。ローカルファイルシステムを必要とするコマンドを実行していて、ネットワークもネットワークを追加するか、他の要件を確認する必要がある場合。まだ問題があり、ログまたはエラーを投稿します。

1
pl_rock