【发布时间】:2021-07-22 21:52:16
【问题描述】:
我有一个带有ExecCondition 的服务文件,当它以status=1/FAILURE 退出时,不会阻止守护程序的启动。
根据文档,我认为应该阻止守护程序启动以及阻止所有其他 ExecStartPre 命令运行。
当 ExecCondition= 命令以退出代码 1 到 254(含)退出时,剩余的命令将被跳过并且单元不会被标记为失败。
我设置了一个每次都应该以明显方式失败的条件。 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,但我看到了相同的行为。
【问题讨论】: