systemd:启用、启动(等待)状态

systemd:启用、启动(等待)状态

如果我在脚本中执行此操作,则状态调用将显示“OK”

  1. systemctl 启用 foo
  2. systemctl 启动 foo
  3. systemctl 状态 foo

但仅几毫秒之后,状态就变成“失败”。

我如何检测启动是否成功?

对我来说,“成功”的含义是:服务器开始运行。

Systemd 开始启动该过程,并不等待查看服务器是否能够正确启动。

示例:服务器配置包含语法错误。服务器将运行几毫秒,然后终止。

最简单的解决方案是在调用“systemctl status foo”之前执行“sleep 1”。

但这感觉很脏。

也许有更好的解决方案来获取启动服务器后的真实状态。

我只关心启动。如果服务器在两小时后出现故障,则这不是问题的一部分。

答案1

通常,在以下情况下,您会failed在命令输出中看到已启动进程的状态:

  1. 进程退出时状态status不等于0或不同于SuccessExitStatus单元文件[Service]部分中指定的参数
  2. 向守护进程发送不干净的信号(杀死等)
  3. 启动守护进程时的超时时间,可以通过TimeoutStartSec或进行设置TimeoutSec,默认值为DefaultTimeoutStartSec,通常为 90 秒,或者按照system.conf,[Manager]部分中的设置
  4. 看门狗(当 时type=notify),同上,由 控制WatchdogSecRuntimeWatchdogSec

服务必须定期使用“WATCHDOG=1”(即“keep-alive ping”)调用 sd_notify(3)。如果两次此类调用之间的时间大于配置的时间,则服务将处于失败状态

  1. type单元文件中设置不正确

  2. 猜测主PID

采用布尔值,指定如果无法可靠地确定服务的主 PID,systemd 是否应该尝试猜测。除非设置了 Type=forking,否则此选项将被忽略并且 PIDFile= 未设置,因为对于其他类型或使用明确配置的 PID 文件,主 PID 始终是已知的。如果守护进程由多个进程组成,猜测算法可能会得出错误的结论。如果无法确定主 PID,服务的故障检测和自动重启将无法可靠地进行。默认为是。

相关内容