サービスを自動化された方法で適切に監視するにはどうすればよいですか?では、競合が発生すると自動的に再起動しますか?

サービスを自動化された方法で適切に監視するにはどうすればよいですか?では、競合が発生すると自動的に再起動しますか?

システムサービス監視をどのように設定しますか?それとも、httpd, mysqld, and my custom daemon実行されているかどうかにかかわらず、各瞬間をチェックし、そうでない場合はすぐに自動的に再起動する自動化されたスクリプトを使用しますか?

どんなアイデアがありますか?

たとえば、

*Day 1:* System is running in Rail way where no support can be 24/7 available, Day 1 was fine. 
*Day 2:* System in the middle of the Rail way crashed cause httpd and mysqld for some reason not running the service

service httpd引き続きservice mysqld実行できるように自動化するにはどうすればよいですか?

答え1

これを行うためのいくつかのツールがあります(daemontoolsとperpを除いて経験がありません)。

私の仕事で私たちは好きです犯人、これは私たちのインフラの最大の特徴です。これらのツールの中には、必要な機能全体のサブセットのみを実行しているため、ユースケースには適していない可能性があります。

答え2

他の回答で述べたように、Dan Bernsteinのデーモンツール同じ元のメカニズムを共有する一連のツールセットを起動しました。

ほとんどの場合、runデーモンとして実行/動作するプログラムを作成し、サービスマネージャまたはスーパーバイザプロセスは通常のUnixおよびLinuxメカニズムを使用してフォークされたサブプロセスとして監視します。 ApacheとMySQLの場合たくさん人々は以前に介入しており、daemontoolsスイートサービス管理の下でこれらのサーバーを実行する方法の多くの例があります。以下はいくつかあります。

Chris Down は、大きなツールセットが適していないと考えています。しかし、実際にはそうではありません。これらのツールセットはすべて一貫して一貫性がありますが、特定の状況に必要なツール以外のツールを使用する必要はありません。ミックス&マッチも可能です。 perpでは、Laurent Bercotのexeclinebすべてのユーティリティを使用でき、noshrunitで私のスクリプトインタプリタとすべてのユーティリティを使用できchpstますservice-manager

同様に、systemd(Linuxのみを使用している場合)またはlaunchd(MacOS 10を使用している場合)でApacheとMySQLを実行できます。 launchd設定ファイルは、他のシステムと比較してかなり複雑で面倒です。ただし、システム単位のファイルはスクリプトと同じ単純さを持ちますrun

mysqld.serviceさまざまな人々のホームブルー便利なシステムサービスデバイスコレクションには、World Wide Webで利用可能なホームブルーとサービスデバイスがかなりたくさんあります。httpd.service

これらのすべては、ブートローダでデーモンを起動し、システムの実行中に管理者/自動制御下でデーモンを停止および開始し、さまざまな障害状態でデーモンを自動的に再起動するための基本的な基盤を提供します。 Xion345は誤ってmonitと混同します。 xyrの回答が示すように、監視と制御に使用される基本層はデーモンSystem 5ですrc。 systemdでもnoshでもかまいません。 (service事実、もしそうなら。)

モニットが属する場所は上の層から。監視装置使用ベースボードとモニターの起動/停止/モニタリング実際に提供されるサービス、どれがするか。またデーモンプロセスを監視するには、デーモン管理者を使用してください。このレイヤでは、nagiosなどの関連ツールを見つけることができます。 (daemontoolsファミリで監視するデーモンにnagiosを簡単に接続し、daemontools APIを使用してプロセスの状態と稼働時間を確認できます。

答え3

Chris Downが書いたものに加えて、以下をお勧めします。監視装置。具体的には、ポートが開いていることを確認し(80)、ポートが閉じている場合はそのサービス(httpdなど)を再起動できます。バラよりこの例SSHDの場合:

check process sshd with pidfile /var/run/sshd.pid
start program  "/etc/init.d/sshd start"
stop program  "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

Monitはperpやdaemontoolsとは異なるアプローチを使用しています。つまり、プロセスが実行されているかどうかを確認するだけでなく、ポートが開いているか、ファイルが存在するか(UNIXソケットなど)も確認します。 daemontoolsやperpよりも設定が簡単で、邪魔にならない場合があります(monitがinitシステムと正しく対話していることを確認する必要はありません)。サービスの再起動に失敗した場合が頻繁に発生した場合は、電子メールを送信するように設定することもできます。

答え4

しかも

GodはRubyで書かれた、設定が簡単で拡張しやすい監視フレームワークです。

サーバープロセスとタスクを実行し続けることは、展開プロセスの簡単な部分です。神は最も単純で最も強力な監視アプリケーションを目指しています。

単純なサーバーの作成simple.rb:

loop do
  puts 'Hello'
  sleep 1
end

simple.godこれでデーモンを監視するスクリプトを作成します。

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive
end

これで監視スクリプトを起動します。

god -c path/to/simple.god -D

神はRubyアプリケーションを監視するだけでなく、あなたを監視し、必要httpdmysqld応じ/etc/init./d/...て適切なスクリプトを呼び出すことができます。

関連情報