web-dev-qa-db-ja.com

Linuxでサービスを監視し、停止した場合に再起動する方法

実際、私はシェルスクリプトを使用する必要があるかどうか、またはすでにいくつかの方法があるかどうかはわかりません。しかし、私たちが使用するアプローチが何であれ、サービスを常に実行し続けたいと思います。

例としてiptablesとしましょう。その後..

  • いつでもiptablesサービスがstoppedである、または(つまり、)実行されていない、started(またはrestarted)に自動的に設定したい停止したときはいつでも(または実行されていない) 。
  • 他のもっと簡単な言葉で言えば、私はServiceを常に稼働させておきたいと思っています。

リアルタイムチェックを行うが問題である場合、私はチェックするかなりの頻度を与えることができるかもしれません。したがって、5分ごとに言うとしましょう)

私が考え得る唯一の方法は、Cron Tabでシェルスクリプトを使用することです。

  • スマートなソリューションはありますか?

ありがとう!

24
夏期劇場

2018年3月更新

この答えは今ではかなり古く、それが書かれたのでsystemdはLinuxでpid1戦争に勝ちました。したがって、systemdがディストリビューションに組み込まれている場合(ほとんど)、 systemd ユニットを作成する必要があります。

以下の回答は後世のために保持されます。


上記のmonit回答は有効ですが、いくつかの代替案について言及したいと思いました:

お使いのオペレーティングシステムでプロセス管理の問題がすでに解決されていることを覚えておいてください。従来、Linuxはsysvinitを使用してきました。sysvinitは基本的に、init.dに表示されるスクリプトのコレクションです。しかし、それはかなり馬鹿げており、プロセスを監視できません。init.dスクリプトは複雑で、正当な理由で置き換えられています。

より近代的なオペレーティングシステムがsysvinitに置き換わり始めており、その先駆けはUpstartとSystemdです。 Debianはsystemdに傾いています。Ubuntuは開発され、ほとんどすでにUpstartに移行しており、Debian Redhat/CentOS/Fedoraのようにsystemdに移行しています。したがって、すでにsysvinitを置き換えたOSを使用している場合は、組み込みのものを使用することをお勧めします。スクリプトは、initスクリプトよりもはるかに簡単に記述できます。

私はrunitを使用しましたが、かなり気に入っていますが、最も簡単に使用できるのはスーパーバイザーです。また、非常によく文書化されており、ほとんどどこでも機能し、すべての主要なディストリビューションにパッケージ化されています。

ただし、何をするにせよ、どうぞ、お願いします。シェルスクリプトは使用しないでください。そのアプローチには多くの問題があります!

25
Alex Forbes

iptablesは、実際には実行されているサービスやデーモンではなく、カーネルの一部であるため、良い例ではありません。 iptablesを実際に「停止」することはできません。構成を指定するだけで、「停止」には空白の構成を指定する必要があります。確かにLinuxシステムがクラッシュしましたが、iptablesを使用したポート転送設定は引き続き機能します。

とにかく、 monit と呼ばれるユーティリティはあなたが望むことをします。 Debianを使用している場合はapt-get install monit離れて。学ぶことは少し複雑ですが、非常に柔軟です。

12
LawrenceC

この単純なスクリプトを使用して、アラートを作成し、実行されていない場合はサービスを開始します。サービスを追加することもできます。

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null
3
Ranjithkumar T

デスクトップ(KDE)の代替ソリューション:

アプレット/ウィジェットServer Status...でサービスを監視できます。インストール後、ウィジェットにコマンドを追加してサービスを監視します

例:systemctl status httpd.service

KDE 4バージョン: https://store.kde.org/content/show.php?content=101336

KDE 5バージョン: https://store.kde.org/p/1190292/

1
intika

質問されてから数年になります。しかし、systemd(centosとREHLで主に使用可能)を使用すると、このbashコマンドをcronで実行して、サービスが停止しているかどうかを確認して再起動できます。

#!/bin/bash

service=$@
/bin/systemctl -q is-active "$service.service"
status=$?
if [ "$status" == 0 ]; then
    echo "OK"
else
    /bin/systemctl start "$service.service"
fi

binディレクトリに保存し、monitorのような名前を付けます。それに適切なファイル許可を与えてください。次にそれを実行します

Sudo monitor redis

redisサービスを確認し、必要に応じて再起動/開始する場合。

最後に、これをcronジョブに追加します。

これが役に立てば幸い

0
Ahmad Sajid

Init/svc監視の長いリストに追加するには、S6のサブディレクトリとして、ブロック66に新しい子があり、s6サービス管理と高速、軽量、ユーザーフレンドリーな方法でログを処理します。これは、Obarun-Linuxの公式ドキュメントへのリンクです https://web.obarun.org/software

これは、この66ソフトウェアを使用してs6を理解する方法のFAQです http://sysdfree.wordpress.com/266

安定版リリースでは、4.20-> 5.0からのカーネルの変更に関連するバグが1つしか検出されなかったため、報告されている他のすべての問題は、何か新しいことを学ぶ人と関係がありました。サービス管理をこれよりも簡単にする必要がある場合は、ms-windows(Linus forbid)に切り替えることをお勧めします。実際にこれがどのように機能するかを確認するには、Obarun live.isoをダウンロードして、それで遊ぶだけです。インストールサービスとその66スクリプトは、サービスを有効化、強制終了、ログの表示、停止および開始(有効化されている場合)、サービスをツリーにまとめ、サービスツリーをすべて同時に開始および停止し、ユーザーレベルのサービスを個別に提供しますシステムから。これは、s6がうまく機能することを実現し、ユーザーがs6で防弾システムを利用することをより簡単にします。

画像のダウンロードはここにあります: https://web.obarun.org/index.php?id=74 md5 check files https://repo.obarun.org/iso/

Initとサービス管理を除いて、s6/66にはシステム上の他のものからの依存関係はありません。これは、残りのソフトウェアを独自に動作させるinit/svc-mgmtブラインドを残して、基本システムのレイヤーです。すべてのs6および66はCで記述されており、Linux固有またはglibc固有ではありません。 Skarnet(s6の作者)のサーバーは、muslカスタムビルドシステムで多くの一時停止をすることなく、10年近く稼働しています。現在、Alpine、Void、Adelieのリポジトリにもs6ソフトウェアがあり、Adelieはデフォルトでそれをサービス監視に使用します。 Voidには66も含まれるようになりました。誰かがs6をxxBSDや他のxxIXシステムに移植したかどうか、またどの程度拡張したかはわかりません。

0
Gus Fun