linux - 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
解决方案
我找到了解决方案:从脚本运行时,systemctl 似乎正在等待“输入”进行身份验证。它并不真正需要这个,所以它在不从脚本运行时立即成功。我通过添加 --no-ask-password 解决了这个问题:
/usr/bin/timeout 180 /bin/systemctl --no-ask-password stop aem-service || echo "test"
推荐阅读
- angular - 创建一个遵循决策树的角度形式
- flutter - 如果应用程序由该链接关闭和打开,则 getInitialLink 不会捕获 Firebase 动态链接
- python - 训练神经网络时保持精度为零 - Python
- javascript - 删除动态生成的文本框
- azure - Azure B1 在创建时无法运行
- java - 将多个对象序列化为一个文件并稍后检索它们
- c++ - 非常基本的问题 c++) 为什么我的打印答案与我希望得到的不同?
- wordpress-theming - WORDPRESS: add_theme_support( 'post-thumbnails' ); 不工作?
- asp.net - 按钮的 asp.net 可见性取决于 DataTable 行值
- php - 适用于 PHP 4.3.9 的 XDebug