如何在 OpenRC 上设置失败服务的自动重启

开放式RC是一个快速且轻量级的初始化系统使用者喜欢阿尔卑斯山,根图, 和阿蒂克斯。它有助于管理服务,确保它们正确启动、停止和重新启动。

但是,如果服务崩溃或意外停止,它不会自动重新启动,要解决此类问题,您需要设置一个系统以在失败后自动重新启动服务。

在本指南中,我们将向您展示如何配置开放式RC监控并在服务失败时自动重新启动服务。

在设置自动重启之前,请检查服务是否正常运行。

rc-service nginx status

查看所有活动服务。

rc-status

为了确保该服务在系统启动时启动,请将其添加到默认运行级别。

rc-update add nginx default

确认服务已添加。

rc-update show | grep nginx

第2步:创建服务监控脚本

要在服务停止时自动重新启动服务,请创建一个监视脚本来检查该服务并在必要时重新启动它。

sudo nano /usr/local/bin/service-monitor.sh

将以下内容添加到文件中。

#!/bin/bash

SERVICE="<service-name>"

if ! rc-service $SERVICE status | grep -q "started"; then
  echo "$(date): $SERVICE is down. Restarting..." >> /var/log/service-monitor.log
  rc-service $SERVICE restart
fi

保存文件并使脚本可执行。

sudo chmod +x /usr/local/bin/service-monitor.sh

步骤 3:设置 Cron 作业来监控服务

现在监控脚本已经准备好了,定期运行它。

crontab -e

添加此行以每 5 分钟运行一次脚本。

*/5 * * * * /usr/local/bin/service-monitor.sh

保存并退出编辑器。

第 4 步:测试配置

为了测试服务是否正确重启,需要手动停止该服务。

rc-service nginx stop

等待5分钟,检查服务是否重启。

rc-service nginx status

检查日志以确认服务已重新启动。

cat /var/log/service-monitor.log

奖励:使用 Monit 进行高级监控

对于更高级的监控和自动重启,您可以使用类似的工具迅速的,它允许您监视多个服务并在它们崩溃时自动重新启动它们。

安装迅速的在您的系统上:

sudo apt install monit   # For Debian/Ubuntu
sudo apk add monit       # For Alpine Linux
sudo emerge --ask monit  # For Gentoo

在系统启动时启用Monit并启动服务。

rc-update add monit default
rc-service monit start

来检查状态。

rc-service monit status

要监控服务,您需要创建一个监控配置文件。

sudo nano /etc/monitrc

在文件末尾添加以下行以监视服务(替换<service-name>与实际的服务名称):

check process <service-name> with pidfile /run/<service-name>.pid
    start program = "/etc/init.d/<service-name> start"
    stop program = "/etc/init.d/<service-name> stop"
    if 3 restarts within 5 cycles then timeout

例如,要监控nginx:

check process nginx with pidfile /run/nginx.pid
    start program = "/etc/init.d/nginx start"
    stop program = "/etc/init.d/nginx stop"
    if 3 restarts within 5 cycles then timeout

保存文件并重新加载迅速的应用更改的配置:

monit reload

启用 Monit Web 界面(可选)

要启用迅速的Web 界面并通过浏览器管理服务,您需要打开迅速的配置文件:

sudo nano /etc/monitrc

取消注释并编辑以下行。

set httpd port 2812
    use address 0.0.0.0    # Listen on all interfaces
    allow admin:monit      # Set username and password (change as needed)

保存并重新启动迅速的

rc-service monit restart

访问迅速的网络界面。

https://your-server-ip:2812

如果您有兴趣为其他设备设置自动重启初始化系统,请查看这些文章:

这些指南涵盖了处理不同 Linux 系统上的服务故障的详细步骤。

结论

通过执行以下步骤,您可以确保您的关键服务运行在开放式RC任何故障后自动重新启动。此设置可减少停机时间并保持系统平稳运行。

无论您使用简单的脚本还是更高级的监控工具(例如迅速的,保持服务运行对于系统稳定性至关重要。