【问题标题】:ExecCondition doesn't prevent start of serviceExecCondition 不会阻止服务的启动
【发布时间】:2021-07-22 21:52:16
【问题描述】:

我有一个带有ExecCondition 的服务文件,当它以status=1/FAILURE 退出时,不会阻止守护程序的启动。

根据文档,我认为应该阻止守护程序启动以及阻止所有其他 ExecStartPre 命令运行。

当 ExecCondition= 命令以退出代码 1 到 254(含)退出时,剩余的命令将被跳过并且单元不会被标记为失败。

systemd.service documentation

我设置了一个每次都应该以明显方式失败的条件。 ExecCondition=-sh -c 'exit(1)'

这是服务文件(更改名称以保护无辜者)。

[Unit]
Description=Application
Wants=x-ray.service yankee.service zulu.service
Requires=alpha.service bravo.service
After=x-ray.service charlie.service bravo.service

[Service]
ExecCondition=-sh -c 'exit(1)'
ExecStartPre=-sh -c 'prestartShellScript.sh'
ExecStart=/opt/app/app argument1 argument2
WatchdogSec=10
Restart=always
RestartSec=10
WorkingDirectory=/opt/app
TimeoutSec=10

[Install]
WantedBy=multi-user.target

但是当我使用systemctl status app 启动服务时,我看到这表明应用程序正在运行并且其他进程也在运行:

     Active: active (running) since Fri 2020-02-07 18:06:57 UTC; 6s ago
    Process: 33783 ExecCondition=/bin/sh -c exit(1) (code=exited, status=1/FAILURE)
    Process: 33796 ExecStartPre=/bin/sh -c prestartShellScript.sh (code=exited, status=0/SUCCESS)
   Main PID: 33827 (app)
      Tasks: 19 (limit: 4177)
     Memory: 101.5M
     CGroup: /system.slice/app.service
             └─33827 /opt/app/app argument1 argument2

我也将我的 ExecCondition 更改为 ExecStartPre,但我看到了相同的行为。

【问题讨论】:

    标签: service systemd


    【解决方案1】:

    ExecCondition=-sh -c 'exit 1' 中的-sh 中删除-

    Unix 堆栈交换对systemd 来说更活跃一些,所以我在那里交叉发布。 See answer on stack exchange

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多