在Linux操作系统中,服务(也称为守护进程)在处理各种任务方面发挥着关键作用,例如网站托管、数据库管理和网络通信。然而,服务有时可能会因为错误、资源使用过高或系统故障等原因崩溃或停止运行。

为了防止服务中断并确保系统平稳运行,Linux系统管理员可以配置服务在失败时自动重启。这在Web服务器(例如Apache、Nginx)、数据库(例如MySQL、PostgreSQL)或其它需要持续可用的关键应用程序中尤其有用。

在本文当中,小编将介绍使用Systemd配置Linux服务的简单方法,以便在其停止时自动重新启动,接下来一起来看看吧。

为什么要自动重启服务?

以下是你可能希望在Linux中自动重启服务的几个原因:

  1. 最小化停机时间:如果服务意外停止,自动重启可以确保用户受到的影响最小。
  2. 提高可靠性:像是Web服务器、数据库和后台进程这样的服务应始终保持运行状态。
  3. 减少人工操作:如果没有自动机制,你需要频繁检查服务状态,并在其失败时手动重
    启。
  4. 应对意外故障:如果服务因为软件缺陷、资源限制或系统错误而崩溃,Systemd可以在不需要管理员介入的情况下重新启动它。

接下来,将介绍使用Systemd设置服务自动重启的步骤。

步骤1:确定要重启的服务

在进行更改之前,需要通过列出所有正在运行的服务,来确认你要配置的服务的确切名称:

systemctl list-units --type=service --state=running

1.png

当然,如果你已经知道服务名称,则可以直接检查其状态(替换 apache2 为你自己想要管理的实际服务名称:

systemctl status apache2

2.png

步骤2:编辑服务配置

Systemd允许用户使用自定义配置文件修改服务行为。与其修改系统范围内的设置(这些设置在系统更新时可能会被覆盖),小编更推荐使用 systemctl edit 命令来创建一个覆盖文件(override file)。只需运行以下命令:

systemctl edit apache2

这将使用你的默认文本编辑器中打开一个空白文件。如果文件不是空的,你会看到可以修改的已有设置;如果是空的,那就需要自己添加所需的重启配置。

3.png

步骤3:添加Systemd重启配置

在编辑器中,添加以下行内容:

[Service]
Restart=always
RestartSec=5s

这些设置的解释说明:

Restart=always :确保服务无论停止的原因是什么,都能重新启动。

RestartSec=5s :告诉systemd在重新启动服务之前等待5秒,这可以防止在服务反复失败时出现快速重启循环的问题。

添加完成后,保存并关闭该文件。

4.png

对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

如果服务再次运行(running),则自动重启功能正在起作用!

其它重启选项

根据你的需求,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

小结
总之,设置Linux服务自动重启可以确保关键应用在发生故障时保持运行,而无需人工干预。通过使用systemd的重启选项,可以最小化停机时间、提高系统稳定性,并减少手动故障排除的需要。

来源:趣云笔记