原创

[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

舒服了~~~~

温馨提示:
本文最后更新于 2022年03月15日,已超过 73 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录