搭建运行环境时,把jar包打好外,我们还需要一个启动脚本,新建一个文件start.sh,内容如下:
ps -ef | grep dvmrms | grep -v grep | awk '{print $2}' | xargs kill -9
nohup java -jar dvmrms.jar >/dev/null 2>&1 &
sleep 10s
tail -100 ./logs/dvmrms_log_file.log
着重解释下ps -ef | grep dvmrms | grep -v grep | awk ‘{print $2}’ | xargs kill -9命令
-
ps -ef | grep dvmrms 这个命令了解linux命令的同学都知道是查找dvmrms的进程,当项目运行时我们执行一下这个命令,可以看到有两个进程
-
grep -v grep 这个命令可以过滤掉查找进程的自身这条命令,grep -v name是查找不包含name的内容,所以在ps -ef命令执行后查出的两条内容中再执行grep -v grep便可以得到我们想要的运行的项目进程
-
awk ‘{print $2}’ 是截取第二列数据,上图中我们查找的进程内容,第二列就是进程号(pid),所以通过此命令获得该进程号
-
最后xargs kill -9 命令就是把前面的输出作为后面命令kill -9 的输入,也就是传左边命令截取的进程号给命令kill -9,就完成了关闭项目的操作了
-
关掉进程后,我们再启动项目就使用nohup java -jar dvmrms.jar >/dev/null 2>&1 &命令后台启动项目
-
sleep 10s
tail -100 ./logs/dvmrms_log_file.log
这两个命令就是先等待10秒,将 ./logs/dvmrms_log_file.log文件中的后100行内容打印出来
这个./logs/dvmrms_log_file.log文件路径是我们项目中logback.xml指定的日志的格式和输出位置,各位同学可以根据自己项目的情况自己修改。
如果执行脚本时遇到 $‘\r‘: command not found 错误
是因为脚本在Windows系统编写时,换行是\r\n,而在Linux系统中换行是\n。
所以在Linux中运行脚本时,系统会认为\r是一个真实的字符(不是换行符),导致运行错误。
解决方法:
linux系统的脚本去掉\r,执行以下命令即可(该命令自动重写覆盖):
sed -i 's/\r//' start.sh