RHEL 6 でクラッシュ後にサービスを自動再起動する

RHEL 6 でクラッシュ後にサービスを自動再起動する

systemd (chkconfig など) なしでこれを実装するにはどうすればよいですか?

PostgreSQL、Mongod、RabbitMQを再起動したいと思います。

答え1

サービスの自動回復を行うには、 を使用できますmonit。これは、かなり軽量で使いやすいサービスです。

Debian にインストールするには、次のようにします。

sudo apt-get install monit

Monitのインストールと設定方法

設定に関しては、編集し/etc/monit/monitrcてサービスを再起動します。

たとえば、デーモンが実行中かどうか、サービスが対応するポートで応答しているかどうかを監視し、PostgreSQL、RabbitMQ、mongoDB の自動リカバリを構成するには、次のようにします。

check process postgres with pidfile /var/postgres/postmaster.pid
   group database
   start program = "/etc/init.d/postgresql start"
   stop  program = "/etc/init.d/postgresql stop"
   if failed unixsocket /var/run/postgresql/.s.PGSQL.5432 protocol pgsql 
      then restart
   if failed host 192.168.1.1 port 5432 protocol pgsql then restart

check host mongodb with address localhost
    start program = "/usr/bin/sudo /opt/database/mongo/bin/mongod"
    stop program = "/usr/bin/sudo /usr/bin/pkill -f mongod"
    if failed port 28017 protocol HTTP
        request /
        with timeout 10 seconds
        then start

check process rabbitmq-server with pidfile /var/run/rabbitmq.pid  
   group rabbitmq  
   start program "/etc/init.d/rabbitmq-server start"  
   stop program "/etc/init.d/rabbitmq-server stop"  
   if failed port 5672 type tcp then restart  
   if 3 restarts within 3 cycles then timeout  

その他のサービスについては、以下を参照してください。モニターウィキ

Monit では、ルールに従って電子メールを送信したり、サーバーの負荷に応じて動作したりすることもできます。詳しく調べることをお勧めします。

答え2

RedHat 6の使用成り上がり者init システムとして。

適切な init 定義を/etc/init(注意: /etc/init.d) に作成する必要があります。

例(ただしデバッグが必要になる場合があります)/etc/init/myservice

start on runlevel [2345]
stop on runlevel [S016]

respawn
exec /code/to/program

終了した場合は、値が再起動さrespawnれます。program

関連情報