[linux]tail -f 自动退出脚本
前言
搭了一个Jenkins,打算写脚本自动来重启tomcat,因为启动是用startup.sh
启动,需要不断的刷新catalina.out
,判断指定的启动成功字符串是否已经出现,如果出现代表tomcat启动成功。
翻山越岭查资料
分析tail -f
命令的时候,想到了使用while
来不断的循环判断,但代码不够好看,最后在搜索的过程中发现一个大佬提供的脚本,如下:
tail -fn 0 --pid=`ps uxh|grep 'sed[[:space:]]\/Server[[:space:]]startup[[:space:]]in'|awk '{print $2}'|sort -nr|head -1` ../logs/catalina.out |sed /Server[[:space:]]startup[[:space:]]in/Q
#解释:
#1、sed /startup[[:space:]]in/Q,执行命令,监控字符串'startup in',也可以换成其他正则表达式来匹配,Q代表查到后退出sed
#2、--pid参数,监控某一个pid,当检测到pid停止的时候,停止tail
#3、ps uxh查询当前用户的进程
#4、grep 'sed[[:space:]]\/startup'查找1里面执行的sed的进程,如果关键字不是startup的话,这里也需要进行更换
#5、awk '{print $2}'获取每行结果的第二个词,也就是pid
#6、sort -nr将结果进行倒序排序
#7、head -1取第一个结果,取最大的pid
#8、从3到7执行过后,取到的pid大致可以认定为1里面sed的pid
#9、tail -fn 0 --pid=`...` xxx.log,pid等号后的 ` 不是引号,是ESC下面那个按键,其中-n 0的作用是防止上一次日志的结尾对本次打印产生影响
稍加修改后如下:
tail -fn 0 --pid=`ps uxh|grep "sed /startup"|grep -v "grep" | awk '{ print $2 } ' | sort -nr | head -1 ` ../logs/catalina.out|sed /startup[[:space:]]in/Q
舒服了~~~~
本文来自:[linux]tail -f 自动退出脚本-小码农,转载请保留本条链接,感谢!
温馨提示:
本文最后更新于 2022年03月15日,已超过 994 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
正文到此结束
- 本文标签: linux jenkins
- 本文链接: https://djc8.cn/archives/linux-tail-f-auto-exit-script.html
- 版权声明: 本文由小码农原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权