Linuxで障害が発生したときにサービスを自動的に再起動する方法


23

Windowsでは、サービスが失敗した場合/失敗した場合の動作を設定できます。Linux(特にCentOS)で同じことを達成する標準的な方法はありますか?

私の質問の大部分は、たとえばTIME_WAIT、FIN_WAIT1などの状態で、開いたままになっているソケットをどのように処理するかです。

現時点で開発中のサービスがクラッシュした場合、ソケットがリッスンポートをクリアまたは変更するのを待ってから、手動で再起動できます。

ご協力いただきありがとうございます。

回答:


26

monitサービスが失敗したときにサービスを監視および再起動するのに最適な方法です。おそらく、これを他の重要なサービス(Apacheなど)に使用することになります。nixCraftには、これをサービスに具体的に使用する方法を詳しく説明した素晴らしい記事がありますが、monitそれ以外にも多くの機能があります。

ソケットの側面については、@ galraenがこのスポットに答えました。


それは私があるかを決定する必要が残念だな答え。2つの別々の質問をする必要がありました。@gelraenの答えは、解決策を探す私の数週間を終えたところです。おかげであなたはとても多くの!@Redmumbaありがとう、Monitは見栄えがいい!
-Pryo

あなたは正しい、間違いなくマークすることを決定した方1 upvote @ gelraenの答えを。正確で非常に有益なスポット。
アンドリューM.

19

サービスの再起動部分のみに応答します。私もMonitに出会いましたが、CentOS 7ではsystemdがすべてを処理してくれます。これらの2行を.serviceファイルに追加するだけです(まだない場合)。

Restart=always
RestartSec=3

参照については、https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/を参照してください。

カスタムsystemdサービスを作成する場合、独自のサービスファイルを作成するのは非常に簡単です。カスタムhttpサーバーについては、以下の例を参照してください。

新しいサービスファイルでエディターを起動します。

vim /etc/systemd/system/httpd.service

そして、必要に応じて編集できる次のコンテンツを追加します。

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

起動時に自動的に起動するようにしたい:

systemctl enable httpd

systemdに変更について通知し、サービスを開始します。

systemctl daemon-reload
systemctl start httpd

そして今、あなたはステータスを見ることができます:

systemctl status httpd

参照については、https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/を参照してください


はい、正確にsystemdほとんどの一般的なディストリビューションの標準サービスマネージャーがあなたのためにそれを行うことができます。
ロルフ

13

setsockopt(2)でリッスンソケットを呼び出すことができるためSO_REUSEADDRbind(2)すべての接続の有効期限が切れるのを待たずに再びソケットにアクセスできます。別の可能性:カーネルから接続をドロップします。FreeBSDにはtcpdropこのためのコマンドがありますが、Linuxについては知りません。


4

LinuxディストリビューションがSysV initの代わりにUpstartを使用する場合、respawnキーワードはこれを行います。

http://upstart.ubuntu.com/cookbook/#respawn


おかげで、これは単なるもののように見えますが、残念ながら私はSysV initにこだわっています。
Pryo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.