我希望我的服务仅在另一个服务不活动时启动。为此,正如其他问题中所解释的那样,我将执行以下操作:
ExecStartPre=/bin/bash -xc '/usr/bin/systemctl is-active --quiet other-unit.service && exit 1 || exit 0'
但是,操作系统不包含 /bin/bash 的可能性很小。在这种情况下,我希望服务能够启动。我试图通过使用来实现这一点:
ExecStartPre=which bash 2>/dev/null && /usr/bin/bash -xc '/usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service && exit 1 || exit 0' || exit 0
但 systemd 抱怨:
which[1122772]: /usr/bin/which: invalid option -- 'x'
which[1122772]: /usr/bin/which: invalid option -- 'c'
which[1122772]: /usr/bin/which: no && in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
我猜 ExecStartPre= 非常有限。有没有可能实现我想要的?
与其调用 bash,不如考虑调用 Bourne shell
/bin/sh
,它从 Unix 开始就已经存在,几乎存在于所有类 Unix 的东西上,一直到你的手机。(尽管在现代系统上,它通常被一个功能稍强的 shell 代替,当被称为 时,它以 Bourne shell 兼容模式运行/bin/sh
。)