我有以下Jenkins post-build shell脚本:
ssh user@my_server <<EOF
service my_service stop
service my_service start
tail -f /opt/services/my_service/logs/current
exit
EOF
此脚本在远程主机(my_server)上重新启动my_service。
我的问题是:命令 service my_service start 只是向RUNIT发出运行my_service的请求,即 service my_service start 在执行后立即返回。
但是 service my_service start 运行一个SpringBoot java Web应用程序,它将所有日志信息写入... / logs / current日志文件。要捕获此日志信息,我已添加命令 tail -f / opt / services / my_service / logs / current 但在这种情况下,Jenkins构建永远不会结束))例如 tail - f 命令永远不会停止。
有没有办法执行我的后期构建脚本(只能在远程服务器上启动我的Web应用程序)并在2分钟内抓取... / logs / current日志文件,或直到此日志有行&# 34; Web应用程序MyApplication已经启动&#34;。
我想在Jenkins的控制台输出中查看... / logs /当前日志文件的内容,并在2分钟后终止 tail -f / p>
答案 0 :(得分:2)
tail -f
在中断之前不会结束,所以你的脚本永远不会完成运行。
你能做的就是在你的日志上使用grep -q
,当它找到它的模式时,它会以0退出状态退出:
grep -q 'Web app MyApplication has been Started' <(tail -f /opt/services/my_service/logs/current)