Bash 超时命令在脚本中不起作用

Bash timeout command doesn't work within a script

如果 systemctl 命令花费的时间太长,我会尝试执行回显,以下命令在终端中执行时效果很好,但如果我在脚本中粘贴完全相同的行并执行该脚本,则始终会调用回显。当它自己执行停止命令时,通常最多需要 2 分钟,我总是检查服务日志,发现它在一段时间内停止得很好。但是当命令位于脚本中时超时继续。

/usr/bin/timeout 180 /bin/systemctl stop aem-service || echo "test"

我使用此命令的目标是在 /bin/systemctl 停止 aem-service 花费的时间过长(超过 180 秒)或以非零退出代码退出时打印测试

这是在 CentOS 7 虚拟机上测试的。

[编辑] 仅执行 /usr/bin/timeout 180 /bin/systemctl stop aem-service 时,我得到退出代码 124,表示超时。 /bin/systemctl 自行停止 aem-service 导致退出代码 0

我找到了解决方案:当来自脚本的 运行 时,systemctl 似乎正在等待 'input' 进行身份验证。它并不真的需要这个,所以当脚本中没有 运行 时它会立即成功。我通过添加 --no-ask-password:

解决了这个问题
/usr/bin/timeout 180 /bin/systemctl --no-ask-password stop aem-service || echo "test"