systemd 如何解释它在 ExecStartPre 和 ExecStartPost 中启动的脚本的返回码?

systemd 如何解释它在 ExecStartPre 和 ExecStartPost 中启动的脚本的返回码?

Systemd 在处理 .service 文件时,能够执行 ExecStartPre 和 ExecStartPost 子句中的脚本。这些脚本可以将值返回给 systemd。

在 systemd 的文档中,它表明除了 0 之外的任何返回值都被视为失败,除非该子句带有前缀“-”,否则表明启动服务的尝试将被中止。

中止的启动尝试没什么大不了的,因为 systemd 只会重新尝试启动该服务,除非该服务被标记为简单(我认为)。

在我继承的脚本中,作者指出返回值 111 通知 systemd 不仅应该中止启动,而且不再尝试进一步启动。在其他地方,除了更典型的 0 之外,脚本还会有条件地返回 10 或 11。这些返回条件似乎是脚本功能不可或缺的一部分。

我找不到任何描述 systemd 对这些返回代码的解释的信息。

答案1

您可以选择主ExecStart命令。我不知道,但怀疑-Post并不-Pre要使用那些。

接受 10 和 11 为有效:成功退出状态=

将 111 视为彻底破坏交易的因素:重新启动阻止退出状态=

否则,您始终可以编写一个快速包装 shell 脚本来缓解缺少systemd 中的支持。

我会做这样的事情:

#!/bin/sh

if [ -f /run/my-script-is-dead ]
then
    # to avoid very fast loop, sleep for a bit
    sleep 10
    exit 1
fi

# Run the script itself
/path/and/usual-command

# check result
RESULT=$?

if [ $RESULT -eq 10 ] || [ RESULT -eq 11 ]
then
    exit 0
fi

if [ $RESULT -eq 111 ]
then
    touch /run/my-script-is-dead
    exit 1
fi

exit $RESULT

但是把文件放在下面/run,它会自动消失每次重新启动时。如果你想要更永久的东西,那么你必须在其他地方创建一个文件(即/var/cache/...

相关内容