Ubuntu で長時間実行されるサーバー プロセスをどのように管理すればよいでしょうか?

Ubuntu で長時間実行されるサーバー プロセスをどのように管理すればよいでしょうか?

サーバーの 1 つで実行する必要があるアプリ (単一バイナリ形式) があり、そのライフサイクルを適切に制御できるようにしたいと考えています。必要なのは次の点です。

  • シンプルな1コマンドで開始/停止/再起動
  • 設定はできるだけ少なくしたい。monitのような大きなものを設定したり、500行のシェルスクリプトを書いたりしたくない。
  • ログファイル内のstdout/stderr/失敗を処理する
  • プロセスが実行中の場合にのみ pid ファイルが存在するように pidfile を管理します (これをシェル スクリプトを使用して手動で正しく実行するのは非常に難しいようです)
  • (オプション)バイナリがクラッシュした場合に何かできる
  • (オプション)サーバーが再起動したりアプリケーションがクラッシュした場合に自動的に起動します

私が探しているのは、多くの設定をすることなく、Ubuntu Server ですぐに使用できる軽量ソリューションです。

答え1

Ubuntuの場合、アップスタートあなたが探しているものです。

https://askubuntu.com/questions/19320/how-to-enable-or-disable-services この AskUbuntu の質問には、あなたが取り組んでいる作業を始めるための優れた情報が記載されています。

簡単に言うと、以下を /etc/init/mybinary.conf にコピーします。

description "My Binary"
author      "Jakub Arnold <[email protected]>"

start on (local-filesystems and net-device-up)
stop on runlevel [!2345]

respawn

pre-start script
   RUN_MODE="daemons"

end script

exec mybinary

これにより、次のことが可能になります。

  • 「service mybinary start/stop/status」によるサービス管理
  • PIDファイル管理
  • クラッシュ時に復活
  • 起動時に実行
  • /var/log/upstart/mybinary.log にログを記録する

Upstart クックブックには必要な情報がすべて記載されています。http://upstart.ubuntu.com/クックブック/

余談ですが、Ubuntu は Upstart を廃止して Systemd に移行する予定ですが、ロードマップは示されていません。

関連情報