如何配置 Linux 服务在崩溃或重启后自动启动 – 第二部分:参考
时间:2024-04-17 10:50:36 来源:网络cs 作者:胡椒 栏目:平台政策 阅读:
作者选择了自由开源基金会作为 Write for Donations 计划的捐赠对象。
介绍
在本教程中,您将使用 systemd
配置 MySQL,在重启或崩溃后自动重新启动。
这是一个两部分系列的第二部分。第一部分涵盖了一般的 Linux 服务管理概念,如 init
守护进程和运行级别。它以 systemd
中的服务管理演示结束。在这里,您将研究 targets
、wants
、requires
和 unit
文件。第二部分提供了使用 MySQL 数据库的实际示例。
先决条件
要完成本教程,您需要:
运行 CentOS 8 的服务器,包括一个具有 sudo 特权的非根用户。要设置所有这些内容,包括防火墙,您可以创建一个运行 CentOS 8 的 DigitalOcean Droplet,然后按照我们的初始服务器设置指南进行操作。
已安装 MySQL。有关详细说明,请参阅我们的教程《在 CentOS 8 上安装 MySQL》。
使用 systemd
配置 MySQL 在启动后自动启动
安装 MySQL 后,检查服务的状态:
sudo systemctl status mysqld.service
输出应显示服务正在运行,但守护进程已禁用:
...
如果服务已启用,请禁用它。我们希望在进行更改之前先探索禁用的行为:
sudo systemctl disable mysqld.service
接下来,运行此命令检查 MySQL 是否被 multi-user.target 所需:
sudo systemctl show --property "Wants" multi-user.target | fmt -10 | grep mysql
不会返回任何内容。现在检查符号链接是否存在:
sudo ls -l /etc/systemd/system/multi-user.target.wants/mysql*
会出现一个消息,指出符号链接文件不存在:
...
现在,如果愿意,重新启动服务器并检查 MySQL 服务。它应该不在运行。
无论您是否重新启动,现在重新启用 MySQL 服务:
sudo systemctl enable mysqld.service
这次,系统将在 /etc/systemd/system/multi-user.target.wants/
下创建一个符号链接:
...
再次运行 ls 命令以确认:
sudo ls -l /etc/systemd/system/multi-user.target.wants/mysql*
您将收到如下输出:
...
启用或禁用 systemd 服务会在默认目标的 wants 目录中创建或删除符号链接。
如果愿意,再次重启 Droplet,当它重新上线时运行 ps -ef
命令来检查服务状态。
ps -ef | grep mysql
此命令将提供有关 MySQL 是否正在运行的信息:
...
现在,您已经配置了 MySQL 在重启后重新启动。接下来,您将考虑崩溃情况。
使用 systemd
配置 MySQL 在崩溃后自动启动
作为一款现代应用程序,MySQL 已经配置为在崩溃后自动启动。让我们看看如何禁用它。
在编辑器中打开 MySQL 服务单元文件:
sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service
在头部信息之后,文件的内容如下:
...
如您所见,Restart 参数的值被设置为 on-failure。这意味着 MySQL 服务将在不干净的退出代码或超时时重新启动。
systemd 服务的 man 页面显示了 Restart 参数的以下表格:
重启设置/退出原因 | no | always | on-success | on-failure | on-abnormal | on-abort | on-watchdog |
---|---|---|---|---|---|---|---|
清洁的退出代码或信号 | X | X | |||||
不干净的退出代码 | X | X | |||||
不干净的信号 | X | X | X | X | |||
超时 | X | X | X | ||||
看门狗 | X | X | X | X |
在 systemd 服务单元文件中,两个参数 - Restart
和 RestartSec
- 控制崩溃行为。第一个参数指定服务何时应重新启动,第二个参数定义了它在重新启动之前应等待多长时间。
为了测试崩溃行为,使用 kill -9 信号停止 MySQL 进程。在我们的情况下,主 PID 是 851;请用您自己的 PID 替换它:
ps -ef | grep mysql
sudo kill -9 851
等待几秒,然后检查状态:
sudo systemctl status mysqld.service
输出将显示 MySQL 已使用新的 PID 重新启动(在我们的情况下,新的进程 ID 是 1513):
...
接下来,重新打开单元文件:
sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service
注释掉 MySQL 守护进程单元文件中的 Restart 指令并保存。这将禁用重新启动行为:
...
之后,重新加载 systemd 守护进程,然后重新启动 mysqld 服务:
sudo systemctl daemon-reloadsudo systemctl restart mysqld.service
您可以通过运行此命令找到服务的主 PID:
sudo systemctl status mysqld.service
...Main PID: 1895 (mysqld)
使用 kill -9
命令,在您的环境中杀死 MySQL PID 的主 PID(我们在测试环境中使用 PID)。
sudo kill -9 1895
检查 MySQL 的状态:
sudo systemctl status mysqld.service
它将显示服务已失败:
...
尝试多次查找服务状态。每次服务都将显示为 failed
。
因此,我们模拟了服务停止并未重新启动的崩溃情况。这是因为我们已经告诉 systemd 在不干净的停止后不要重新启动服务。如果您编辑 mysqld.service 单元文件以取消注释 Restart 参数,保存它,重新加载 systemctl 守护进程,最后重新启动服务,那将恢复正常功能。
这就是您如何配置本机 systemd 服务在崩溃后自动启动。您只需在服务单元文件的 [Service]
部分下添加额外的 Restart
指令(和可选的 RestartSec
)。
结论
在这个两部分系列中,你学习了 Linux 生态系统中使用的服务管理守护程序。然后,你探索了 systemd 的基础知识,并将这些基础知识应用到了一个实际的例子中:配置数据库在重启或崩溃后重新启动。如果你希望了解更多关于 systemd 的知识,请考虑阅读我们关于使用 systemctl
的全面教程。
本文链接:https://www.kjpai.cn/zhengce/2024-04-17/159720.html,文章来源:网络cs,作者:胡椒,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
下一篇:返回列表