在一个Linux系统中,服务(也称为守护进程)在处理诸如Web托管、数据库管理和网络等各种任务中扮演着关键角色。然而,服务有时可能会由于错误、资源使用过高或意外系统故障而崩溃或停止。
为了防止停机时间并确保平稳运行,系统管理员可以配置服务在失败时自动重新启动,这对于需要始终可用的Web服务器(Apache、Nginx)、数据库(MySQL、PostgreSQL)或其他关键应用特别有用。
在本指南中,我们将解释如何使用systemd在Linux中配置服务,以便在停止时自动重新启动。
为什么要自动重启服务?
有几个原因可能导致你想要在Linux中自动重新启动服务:
- 最小化停机时间:如果服务意外停止,自动重新启动确保用户经历最小中断。
- 提高可靠性:像Web服务器、数据库和后台进程这样的服务应始终运行。
- 减少手动工作:没有自动化,你需要频繁检查服务,并在它们失败时手动重新启动。
- 处理意外故障: 如果服务由于软件错误、资源限制或系统错误而崩溃,systemd 可以在无需管理员干预的情况下重新启动它。
现在,让我们按照以下步骤设置自动重启使用 systemd。
步骤 1: 确定要重新启动的服务
在进行更改之前,您需要知道要配置的服务的确切名称,方法是通过 列出所有正在运行的服务。
systemctl list-units --type=service --state=running

如果您已经知道服务名称,可以检查其状态。
systemctl status apache2

将 apache2
替换为您想管理的实际服务名称。
步骤 2: 编辑服务配置
Systemd 允许您使用自定义配置文件修改服务行为。我们将使用 systemctl edit
创建一个覆盖文件,而不是修改系统范围的设置(这些设置可能会在更新期间被覆盖)。
运行以下命令:
systemctl edit apache2
这将在您的 默认文本编辑器 中打开一个空白文件。
如果文件不为空,您将看到可以修改的现有设置。否则,您需要添加必要的重启配置。

步骤 3: 添加 Systemd 重启配置
在编辑器中添加以下行。
[Service] Restart=always RestartSec=5s
这些设置的说明:
Restart=always
– 确保服务在停止时无论原因如何都能重启。RestartSec=5s
– 告诉systemd在重启服务之前等待5秒,这可以防止在反复失败的情况下快速重启循环。
添加后,保存并关闭文件。

在对systemd服务进行更改后,您需要重新加载systemd并重启服务,以确保新配置生效:
sudo systemctl daemon-reload sudo systemctl restart apache2
要确认服务现在已设置为自动重启,请运行:
sudo systemctl show apache2 | grep Restart
如果一切配置正确,您应该会看到:
Restart=always
步骤4:在Linux中测试自动重启
为了确保配置有效,您可以手动停止服务并检查它是否重启。
sudo systemctl stop apache2
等待5秒,然后检查其状态。
sudo systemctl status apache2
如果服务再次运行,则自动重启功能正常!
其他重启选项
根据您的需求,systemd提供不同的重启策略:
Restart=always
– 服务始终重启,即使它是手动停止的。Restart=on-failure
– 仅在服务因错误退出时重启(但不在手动停止时)。Restart=on-abnormal
– 如果服务因信号(如段错误)崩溃,则重启服务。Restart=on-watchdog
– 如果服务在运行时超时,则重启服务。
您可以根据需求将Restart=always
替换为以下任何选项之一。
如何检查服务问题日志
如果某个服务一直失败,建议使用journalctl命令来查看服务的日志,该命令将显示该服务在过去10分钟内的日志。
journalctl -u apache2 --since "10 minutes ago"
要查看实时日志流,请使用:
journalctl -u apache2 -f
结论
为失败的服务设置自动重启可确保关键应用程序持续运行,无需手动干预。通过使用systemd的重启选项,您可以将停机时间最小化,提高系统稳定性,并减少手动故障排除的需求。
Source:
https://www.tecmint.com/automatically-restart-service-linux/