Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 監控 Apache 服務自動重啟 Shell 腳本與 Crontab 部署

編輯:Linux 教學

生產環境中,Web 服務(Apache/Nginx)偶爾會因記憶體洩漏、模組錯誤或資源耗盡而靜默掛掉。部署一個輕量級的監控腳本,定期檢測進程狀態並在異常時自動拉起,是保障服務可用性的基礎手段。

監控腳本:httpcheck.sh

#!/bin/bash
# 檢測 Apache (httpd) 是否運行,若無則自動啟動
# 適用於 CentOS/RHEL 6/7、Debian/Ubuntu (服務名可能為 apache2)

SERVICE_NAME="httpd"          # Debian/Ubuntu 請改為 apache2
CHECK_CMD="pgrep -x $SERVICE_NAME"
LOG_FILE="/var/log/httpd_monitor.log"

check_service() {
    if ! $CHECK_CMD >/dev/null 2>&1; then
        echo "$(date '+%F %T') [$SERVICE_NAME] 未運行,嘗試啟動..." | tee -a "$LOG_FILE"
        systemctl start $SERVICE_NAME 2>/dev/null || service $SERVICE_NAME start
        sleep 2
        if $CHECK_CMD >/dev/null 2>&1; then
            echo "$(date '+%F %T') [$SERVICE_NAME] 啟動成功" | tee -a "$LOG_FILE"
        else
            echo "$(date '+%F %T') [$SERVICE_NAME] 啟動失敗,請人工介入" | tee -a "$LOG_FILE"
        fi
    fi
}

check_service

部署到 Crontab(每分鐘檢測)

chmod +x /usr/local/bin/httpcheck.sh
echo '* * * * * root /usr/local/bin/httpcheck.sh' > /etc/cron.d/httpd_monitor
systemctl reload crond

或直接編輯 /etc/crontab 加入:

* * * * * root /usr/local/bin/httpcheck.sh

進階增強建議

  • 多服務監控:將 SERVICE_NAME 改為陣列,迴圈檢測 httpd、mysqld、php-fpm 等。
  • 健康檢查:加入 curl -sf https://127.0.0.1/healthz 驗證 HTTP 回應,而非僅檢查進程存在。
  • 通知告警:啟動失敗時發送郵件或 Webhook(mail -s "Apache Down" admin@domain.com)。
  • 日誌輪轉:配置 logrotate 管理 /var/log/httpd_monitor.log。

systemd 替代方案(現代系統推薦)

對於 systemd 管理的服務,可直接修改單元檔啟用自動重啟:

systemctl edit httpd
# 輸入:
[Service]
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitIntervalSec=60

此方式無需額外腳本,由 init 系統原生保障,較為優雅。

Copyright © Windows教程網 All Rights Reserved