首页 > 解决方案 > Bash 超时命令在脚本中不起作用

问题描述

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

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

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

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

[编辑] 仅执行 /usr/bin/timeout 180 /bin/systemctl stop aem-service 时,我得到退出代码 124,表示超时。/bin/systemctl stop aem-service on it's own results in exit code 0

标签: linuxbashcentosredhat

解决方案


我找到了解决方案:从脚本运行时,systemctl 似乎正在等待“输入”进行身份验证。它并不真正需要这个,所以它在不从脚本运行时立即成功。我通过添加 --no-ask-password 解决了这个问题:

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

推荐阅读