背景:
之前遇到项目部署Jenkins和gitlabci 运行jar成功后,Jenkins控制台执行到最后一直阻塞,导致程序最终超时失败。
原因是:
对于没接触过这块的朋友,简单通过 java -jar 不加任何参数启动程序,就导致上面的问题。
如何正确启动jar
需要了解:jar包后台启动–nohup
1、当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
java -jar xxx.jar
2、当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。
java -jar xxxxx.jar &
3、nohup意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
注:无论怎么执行。最后面都要加 &
我因为忘记加 & 导致 shell一直阻塞(一直没找到问题),但是不能只加 &,否则依然会阻塞
nohup java -jar xxx.jar &
生成日志 在尾后追加 > out.log &
1、demo1 保留日志 (会阻塞)
nohup java -jar xxx.jar > out.log &
demo2 放弃标准输入 (会阻塞)
nohup java -jar xxx.jar >/dev/null &
demo3 放弃标准输入和标准错误输出 (这是正确的方案)(不会阻塞)
#不保留日志
nohup java -jar xxx.jar >/dev/null 2>&1 &
#保留日志
nohup java -jar xxx.jar > out.log 2>&1 &
其他问题
1、查看jar 包进程
ps aux|grep xxx.jar
2、jps显示的java进程名称为jar如何解决
使用 jps 时发现显示的进程名称为jar,而无法显示真正名称,很可能是
java -jar 的时候,写的是相对路径
#错误写法
java -jar xxx.jar
#正确写法
java -jar /home/opt/app/xxx.jar