有没有办法确保只有一个 systemd@.service 实例正在运行响应。开始

TNT*_*TNT 8 systemd

我想使用一个 .service 文件从不同的目录启动服务,但如果有一种方法可以自动停止任何具有不同实例名称(甚至相同)的正在运行的实例,或者至少防止启动一个第二审。

假设我有一个special_service@.service包含

WorkingDirectory=/var/special_service/%i
Run Code Online (Sandbox Code Playgroud)

然后调用systemctl start special_service@try_one,稍后我发出systemctl start special_service@try_two然后第二个实例应该要么无法以适当的消息开始,要么更好地停止special_service@try_one并开始special_service@try_two

int*_*lfx 2

systemd 本身没有这样的可能性。您可以将二进制文件包装在创建/检测锁定文件的 shell 脚本中,并编写一个额外的 shell 脚本来删除它(以在 上运行ExecStopPost=)。

只需记住exec最后才是真正的二进制文件,以免留下额外的 bash 进程。