Linux
如何在 Linux 中自動重啟服務失敗
在 Windows 上,您可以設置服務失敗時應該發生的情況。是否有在 Linux(特別是 CentOS)上實現相同目標的標準方法?
我的問題的更大部分是:您如何處理已打開的套接字 - 例如在 TIME_WAIT、FIN_WAIT1 等狀態下。
目前,如果我正在開發的服務崩潰,我必須等待套接字清除或更改偵聽埠,然後才能手動重新啟動它。
謝謝你的幫助。
monit
是在服務失敗時監視和重新啟動服務的好方法——您最終可能會將其用於其他基本服務(例如 Apache)。有一篇關於 nixCraft 的好文章詳細說明瞭如何將其用於服務,儘管monit
它本身還有更多的功能。至於套接字方面,@galraen 回答了這個問題。
只回答服務重啟部分。我也遇到過 Monit,但在 CentOS 7 上,systemd 會為你處理所有這些。您只需將這兩行添加到 .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