Linux

如何在 Linux 中自動重啟服務失敗

  • April 26, 2021

在 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

引用自:https://serverfault.com/questions/252137