GNU/Linux >> Linux の 問題 >  >> Linux

Linux で障害時にサービスを自動的に再起動する方法

解決策 1:

サービスの再起動部分のみ回答します。私も 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/ を参照してください。

解決策 2:

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

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

解決策 3:

setsockopt(2) を呼び出すことができます SO_REUSEADDR のリッスン ソケット用 、だからあなたは bind(2) できるでしょう すべての接続が期限切れになるのを待たずにもう一度。別の可能性:カーネルからの接続を削除します。 FreeBSD には tcpdrop があります Linux については知りません。

解決策 4:

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

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


Linux
  1. Linux ソフトウェア ウォッチドッグの使用方法

  2. Ubuntu Linux で実行されているリモート MySQL サーバーを再起動する方法は?

  3. 失敗した場合にLinuxバックグラウンドプロセスを自動的に再起動する方法は?

  1. LinuxでSystemdサービスを作成する方法

  2. Linux で再起動をスケジュールするにはどうすればよいですか?

  3. Linux サーバー構成を文書化する方法は?

  1. Linuxでサービスを開始、停止、および再起動する方法

  2. Linux – Xセッションを保存する方法— Archlinux + openbox?

  3. Linuxでポートを開く方法