如何在 SysVinit 和 Upstart 上出现故障后自动重新启动服务

在、管理和相对简单。然而,许多较旧的或最小的 Linux 系统依赖于替代方案init系统如系统初始化暴发户,这需要不同的方法来管理和重新启动服务。

在本指南中,我们将探讨如何使用以下命令在非 systemd 系统上自动重新启动失败的服务系统初始化暴发户

系统初始化是最古老的之一init系统,通常用于诸如德班中央操作系统之前。

第 1 步:安装并配置 monit

迅速的是一个轻量级的开源实用程序,可以监视服务并在服务失败时自动重新启动它们。

# On Debian/Ubuntu
sudo apt update
sudo apt install monit

# On CentOS/RHEL
sudo yum install monit

步骤 2:配置 Monit 来监控服务

编辑Monit配置文件:

sudo nano /etc/monit/monitrc

添加服务定义:

# Example: Monitor Apache service
check process apache2 with pidfile /var/run/apache2/apache2.pid
    start program = "/etc/init.d/apache2 start"
    stop program = "/etc/init.d/apache2 stop"
    if failed port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

上述服务定义的解释:

  • 检查apache2进程– 定义要监控的服务。
  • 启动/停止程序– 启动和停止服务的命令。
  • 如果80端口失败– 如果 HTTP 端口无法访问,则重新启动。

接下来,启用、启动并验证 monit 的状态。

sudo systemctl enable monit
sudo systemctl start monit
sudo monit status

2. 使用Upstart自动重启服务

暴发户是默认值init系统开启乌班图systemd,它使用位于/etc/init/定义服务管理。

第 1 步:创建 Upstart 配置文件

为服务创建自定义 Upstart 配置。

sudo nano /etc/init/apache2.conf

添加以下内容。

# Apache service monitoring
description "Apache2 Service"
start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5

exec /usr/sbin/apache2ctl -D FOREGROUND

上述配置说明:

  • 重生– 如果服务失败,自动重新启动服务。
  • 重生限制 10 5– 将重新启动限制为 5 秒内 10 次尝试,以防止过度重新启动。

接下来,启用、启动和管理服务。

sudo start apache2
sudo stop apache2
sudo status apache2

启动时自动启用该服务。

sudo update-rc.d apache2 defaults

3.使用Cron手动重启服务

如果迅速的或者暴发户不可用,后备方法是使用定期检查并重新启动服务。

创建一个 shell 脚本。

sudo nano /usr/local/bin/check_apache.sh

添加以下内容。

#!/bin/bash
if ! pgrep -x "apache2" > /dev/null
then
    /etc/init.d/apache2 start
fi

使脚本可执行。

sudo chmod +x /usr/local/bin/check_apache.sh

添加 cron 作业来运行脚本。

sudo crontab -e

添加以下行以每 5 分钟检查一次服务。

*/5 * * * * /usr/local/bin/check_apache.sh

如果您有兴趣为其他 init 系统设置自动重启,请查看以下文章:

结论

在非 systemd 系统上自动重新启动失败的服务需要更多的手动设置,但是像这样的工具迅速的,暴发户, 或者计划任务脚本可以有效地处理服务故障并保持您的应用程序平稳运行。

如果您仍在使用非 systemd 系统,可能值得考虑升级到基于 systemd 的发行版,以便更轻松地进行服务管理。