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"
如果 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"