如何让systemctl 服务异常退出后自动重启

Published on Nov. 12, 2024, 3:19 p.m.

  1. 修改服务配置文件(以.service文件为例)
  2. 首先,需要找到服务对应的.service文件。这些文件通常位于/etc/systemd/system/或者/lib/systemd/system/目录下。假设服务名为your_service.service
  3. 使用文本编辑器(如nanovim)打开服务文件:sudo nano /etc/systemd/system/your_service.service
  4. [Service]部分添加Restart=always选项。这会告诉systemctl在服务异常退出(包括由于错误、崩溃等原因)时自动重启服务。完整的[Service]部分可能看起来像这样:
    [Service] Type=simple ExecStart=/path/to/your/executable Restart=always
  5. 其中ExecStart是服务启动的命令,需要根据实际情况填写正确的可执行文件路径和参数。
  6. 重新加载systemd配置并启动服务
  7. 保存并关闭服务文件后,需要重新加载systemd的配置,以便它能识别服务文件的修改。使用命令:sudo systemctl daemon-reload
  8. 然后启动服务(如果服务还没有启动):sudo systemctl start your_service。现在,当服务出现异常退出的情况时,systemd就会自动重启它。

  9. 其他重启策略选项(可选)

  10. 除了Restart = always,还有其他一些重启策略可以选择。例如:
    • Restart=on - failure:只有当服务以非零退出码退出(表示出现错误)时才会重启。这是一种比较谨慎的重启策略,避免了一些正常退出情况(如服务正常关闭)导致的不必要重启。
    • Restart=on - abnormal:当服务以异常信号(如SIGABRTSIGSEGV等表示程序出现严重错误的信号)终止时重启。
    • 可以根据服务的具体性质和对可靠性的要求来选择合适的重启策略。同时,还可以通过RestartSec选项来设置重启前等待的时间(以秒为单位),例如RestartSec = 5表示在服务异常退出后等待5秒再重启。

Tags: