我希望我的服务仅在另一项服务未处于活动状态时启动。要做到这一点,请按照另一个问题,我准备这么做:
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= 非常有限。我能实现我想要的吗?
答案1
与其调用 bash,不如考虑调用 Bourne shell /bin/sh
,它自 Unix 诞生之初就已存在,存在于几乎所有类 Unix 系统中,甚至手机中。(不过在现代系统中,它通常被功能更强大的 shell 所取代,当被调用时,它会以 Bourne shell 兼容模式运行/bin/sh
。)