如何在Systemd中忽略'ExecStart'的失败

4

我正在尝试创建一个服务,使用ExecStart运行多个脚本,其中一些可能失败。 我需要忽略这些失败的脚本并返回服务成功。

以前我使用upstart来实现这一点。

start on runlevel [23]
stop on shutdown

script
    set +e # Disable exit on non 0
    stop sys_process_script
    start sys_init_script
    start sys_process_script
    set -e # Enable exit on non 0
end script

但我不知道如何忽略失败的脚本。这是我目前的实现方式。
[Unit]
Description=System starter

[Service]
Type=forking
ExecStart=/bin/systemctl stop sys_process_script
ExecStart=/bin/systemctl start sys_init_script
ExecStart=/bin/systemctl start sys_process_script

如果在systemctl或者.service - onFailure中失败了,有没有办法忽略脚本?


请注意,如果您在服务中使用 systemd 调用 systemctl,那么您正在做一些错误的事情 :-) 查阅 目标单元配置 手册,该手册解释了如何以统一的方式将一系列 systemd 命令分组。 - Gwyneth Llewelyn
3个回答

4

我知道这个问题已经问了一段时间了,但是systemd有一个更简单的功能来忽略失败的脚本。

只需在路径前加上减号:-

例如:

ExecStart=-/bin/systemctl stop sys_process_script
ExecStart=-/bin/systemctl start sys_init_script
ExecStart=-/bin/systemctl start sys_process_script

请参考 Unix StackExchange@mark-stosberg 的回答。

参考文献在这里:表1. 特殊可执行文件前缀


3

如何轻松包裹内联元素

ExecStart=/bin/sh -c"command_which_will_fail; exit 0;"

0

让二进制可执行文件或脚本返回零(0)的退出代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接