问题场景
最近笔者部署新项目时,发现项目能正式运行,同时也读取到远程nacos配置信息,由于项目总是会异常终止,这里在日志打印过程中,每次使用ctrl+c终止日志输出后,项目就会终止,日志查看显示如下
问题分析与处理
项目本身是可以正常运行的,接口也在正常调用和输出日志。每当执行Ctrl+C命令后,程序也被终止了。看了下自己的启动脚本是这样的
#!/bin/bash
#1,获取、进程号
PID=$( ps -ef|grep tw-wx-map | grep -v grep | awk '{print $2}')
#2,启动 xx-wx-map.jar的函数
start(){
echo "start_wx"
exec nohup java -jar /home/ap/xx-wx-map/tw-wx-map.jar > /home/ap/xx-wx-map/wx.out 2>&1 &
echo "end_wx"
tail -f wx.out
}
#3,判断1中获取的PID是否存在,即判断 xx-wx-map.jar有没有启动
if [ -z "$PID" ]
then
#4,日志
echo "Sart the xx-wx-map directly "
#5, xx-wx-map.jar之前没有启动的话,这里直接调用start函数
start
echo "go start"
else
#6, xx-wx-map之前启动过且进程依然存活,则kill掉,然后调用start函数
echo "kill the existing xx-wx-map process firstly."
kill -9 $PID
echo " $PID has been killed"
start
fi
这边笔者测试后发现,问题在这个exec语法,
在Shell脚本中,exec命令用于替换当前shell进程,并执行指定的命令或程序。这意味着调用exec之后,原来的shell脚本将不再继续执行任何后续命令。将exec在语句中去掉后,项目的这个异常问题也就解决了。
补充
退出日志打印页面,可以按照以下方式操作:
对于 cat,可以尝试 Ctrl+C 或者 Ctrl+D。
对于 more 和 less,可以按 q 键。
对于 tail -f,可以使用 Ctrl+C。
尾言
以上就是笔者对这次bug的分析和处理,后续有相关补充也会更新上去,有需要的同学可以参考下。