実行可能ファイルが停止した場合に再起動する方法


8

プロセスを監視し、何らかの理由でプロセスが停止した場合に実行可能ファイルを再起動する方法を探しています。Linuxには、これを実行できる組み込みのツールがありますか?


この質問の中にいくつかのより多くの回答とポインタがありますserverfault.com/questions/56526/...
JRG

回答:


7

initから起動した場合は、initで再起動できます。プロセスが必要な実行レベルで、プロセスのアクションを「再起動」に設定します。


同様に、launchdはかなりいいです。
ジェレミーL

はい。デーモンツールは、この種のものにも非常に優れていますが、残念ながら「組み込み」テストに失敗します。
Cian

10

以前に同様の質問に回答しました

あなたの場合:

#!/bin/bash
while ! <<command>>
do
  sleep 1
  echo "Restarting program..."
done

<<command>>実行したいコマンドに置き換えてください。ループを解消するには、プロセスを終了コード0で終了する必要があります。それ以外の場合は、スクリプトによって再起動されます。


いいね。これはkshでも機能し、メッセージをシステムログに書き込むために、「echo」を「logger」コマンドに変更します。
Mei

パーフェクトな答えbro.keep it up
Arunjith RS

4

停止した場合にのみ再起動しますか? これの問題は、フリーズする状況を処理しないことです。 したがって、プロセスを確認するだけでは必ずしも効果はありません。したがって、これがWebサーバーのようなものである場合は、ユーザーの視点からスクリプトをチェックする必要があります。

Nagios Monitoringを設定すると、イベントハンドラーを使用できるようになります。これらは、サービスがダウンしたときに実行されるように記述したスクリプトにすぎないため、Webサイトがダウンした場合に、Apacheなどを再起動するスクリプトを作成できます。


+1、意図的に殺された状況もカバーするようにしてください。
Maximus Minimus

良い点ですが、私の場合、プロセスは消えます
フグ

3

ディストリビューションによって異なりますが、このタスクには「monit」を正常に使用しました。とても簡単です。独自のチェックを記述したり、プロセスのPIDを監視したりできます。

monitrcファイルの例:

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

2

なぜ単純なbashスクリプトではないのですか?

#!/usr/bin/bash
while `true`
do
  xeyes
done

xeyesを任意のプログラムに置き換えます。


0

短い答え:いいえ、自分で行う必要はありません。

長い答え:開始するには親プロセスが必要であり、それが有効であることを確認し続け、必要に応じて再起動します。

daemontoolsそれを管理するようなものを使用できます。


短い答え:あなたは完全に間違っています。長い答え:Linuxディストリビューションにinittabがない場合、/ etc / event.d /になります。どちらのメカニズムでも、プロセスが停止するとプロセスが再起動します。
ポールトンブリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.