bash - 注意在 bash while 循环中出现超时的日志行
问题描述
我确实有一个 bash 脚本来运行 Jira 迁移。Jira7 Docker 容器应该运行直到重新索引完成并超时两小时,然后启动 Jira8 容器。
#!/bin/bash -ex
SECONDS=0
docker-compose -f /root/docker-compose-jira7.yml up -d
docker logs jira7 >& /tmp/jira7.log
while ! grep "Re-indexing is 100% complete" /tmp/jira7.log > /dev/null; [[ $SECONDS -lt 7200 ]]
do
sleep 60
docker logs jira7 >& /tmp/jira7.log
done
docker-compose -f /root/docker-compose-jira7.yml down
docker-compose -f /root/docker-compose-jira8.yml up -d
printf \
'It took %dh:%dm:%ds to run the migration process\n' \
$(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60))
我在日志中查找的字符串行如下所示:
2020-07-24 16:07:56,347 SharedEntityIndexer:thread-6 INFO localadmin 951x74x1 1y619f7 XXX.XXX.XXX.XXX,172.19.0.2 /secure/admin/IndexReIndex.jspa [c.a.j.w.a.admin.index.IndexAdminImpl] Re-indexing is 100% complete. Current index: PortalPage
仅寻找日志行出现的 while 循环工作正常。然后我添加了 timeout 选项[[ $SECONDS -lt 7200 ]]
,但现在日志行搜索不再起作用。
在 while 循环中具有这两个条件的正确方法是什么?
解决方案
使用&&
以便两个命令都必须成功才能继续循环。使用;
时,将! grep ...
忽略的退出状态,循环仅考虑的退出状态。[[ ...]]
while ! grep "Re-indexing is 100% complete" /tmp/jira7.log > /dev/null &&
[[ $SECONDS -lt 7200 ]]
do
...
推荐阅读
- laravel - Laravel 无法读取 vue 文件
- docker - Github Actions Container 未运行
- html - 卡住试图让这两列并排
- javascript - 页面刷新或仅新页面上的“未捕获的类型错误”...?
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“替换”
- java - 为什么 JPanel 大小不对?
- oracle - Oracle 时间范围查询
- python - 蟒蛇插座;我的连接中断了我的数据流
- javascript - 默认排序在 v-data-table Vuetify 中不起作用
- c++ - 如何使用 cmake 在 Windows 上构建 webview?