4

简短的版本是:

我有一个 systemd 单元,我想在调用时检查脚本的返回码:

systemctl status service.service

长版:我有一个 lsb init 脚本可以做到这一点,当状态作为参数传递时,它调用一个脚本来检查多个进程的状态,并根据返回代码,init 系统正确返回软件的状态。

现在,在将脚本调整为 systemd 时,我不知道如何配置此行为。

4

3 回答 3

4

简短的回答

这在 systemd 中是不可能的。动词总是做同样的systemctl status事情,它不能按单位覆盖到自定义操作。

长答案

您可以使用并指向您的自定义状态脚本编写一个foo-status.service单元文件,然后运行​​. 但是,这只会提供零/非零信息(任何非零退出代码都将转换为 1)。Type=oneshotExecStart=systemctl start foo-status

要获取您的状态脚本的真正退出代码,请运行systemctl show -pExecMainStatus foo-status,但是,如果您走到这一步,那么直接运行您的脚本会更简单。

于 2016-08-23T19:30:54.083 回答
1

您可以使用:

systemctl show -p  ExecMainStatus service.service | sed 's/ExecMainStatus=//g'

这将返回服务的退出代码。

于 2019-01-28T12:03:02.723 回答
0

如果您可以控制以这种方式启动/停止的服务的代码,那么您可以轻松地对其进行编辑并将结果保存在文件中。

否则,您始终可以添加一个为您执行此操作的包装器。

#!/bin/sh
/path/to/service and args here
echo $? >/run/service.result

然后可以使用该文件的内容访问您的状态:

STATUS=`cat /run/service.result`
if test $STATUS = 1
then
  echo "An error occurred..."
fi

(旁注:/run/只能由 root 写入,/tmp/如果您不是 root,请使用。)

于 2016-08-27T03:41:14.067 回答