如何让systemctl 服务异常退出后自动重启
Published on Nov. 12, 2024, 3:19 p.m.
- 修改服务配置文件(以
.service
文件为例) - 首先,需要找到服务对应的
.service
文件。这些文件通常位于/etc/systemd/system/
或者/lib/systemd/system/
目录下。假设服务名为your_service.service
。 - 使用文本编辑器(如
nano
或vim
)打开服务文件:sudo nano /etc/systemd/system/your_service.service
。 - 在
[Service]
部分添加Restart=always
选项。这会告诉systemctl
在服务异常退出(包括由于错误、崩溃等原因)时自动重启服务。完整的[Service]
部分可能看起来像这样:
[Service] Type=simple ExecStart=/path/to/your/executable Restart=always
- 其中
ExecStart
是服务启动的命令,需要根据实际情况填写正确的可执行文件路径和参数。 - 重新加载systemd配置并启动服务
- 保存并关闭服务文件后,需要重新加载
systemd
的配置,以便它能识别服务文件的修改。使用命令:sudo systemctl daemon-reload
。 -
然后启动服务(如果服务还没有启动):
sudo systemctl start your_service
。现在,当服务出现异常退出的情况时,systemd
就会自动重启它。 -
其他重启策略选项(可选)
- 除了
Restart = always
,还有其他一些重启策略可以选择。例如:Restart=on - failure
:只有当服务以非零退出码退出(表示出现错误)时才会重启。这是一种比较谨慎的重启策略,避免了一些正常退出情况(如服务正常关闭)导致的不必要重启。Restart=on - abnormal
:当服务以异常信号(如SIGABRT
、SIGSEGV
等表示程序出现严重错误的信号)终止时重启。- 可以根据服务的具体性质和对可靠性的要求来选择合适的重启策略。同时,还可以通过
RestartSec
选项来设置重启前等待的时间(以秒为单位),例如RestartSec = 5
表示在服务异常退出后等待5秒再重启。