2021-12-24补充:

之前遇到Jenkins和gitlabci 导致运行jar成功后,一直阻塞,jenkins任务构建部署成功不会挂断。

原因是:之前没接触过这块运维,简单通过 java -jar  不加任何参数启动程序,程序不会挂断。就导致上面的问题。

1、执行jar会遇到无法 无法结束的情况
必须要加 2>&1 
nohup java -jar -Xms100m -Xmx100m /root/mybatis-plus-0.0.1-SNAPSHOT.jar  >/dev/null 2>&1 &
 
2、jps显示的java进程名称为jar如何解决
只要把  java -jar  xxx.jar  的 xxx.jar 的位置是 绝对位置就可以了 
3、查看jar 包进程
ps aux|grep   jar包名称.jar
4、如何正确启动jar
1、当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
java -jar xxxxx.jar     
2、当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。
java -jar xxxxx.jar &   
3、( 常用 )意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行     
注意:无论怎么执行。最后面都要加  &
我因为忘记加  & 导致 shell一直阻塞(一直没找到问题),但是不能只加 &,否则依然会阻塞
nohup java -jar xxxxxx.jar &     
生成日志  在尾后追加  > out.log  &
demo1 保留日志  (会阻塞)
nohup java -jar    wx-scheduling-0.0.1-SNAPSHOT.jar      > out.log   &
demo2 放弃标准输入 会阻塞)
nohup java -jar wx-scheduling-0.0.1-SNAPSHOT.jar         >/dev/null  &
demo3 放弃标准输入和标准错误输出  (这是正确的方案)(会阻塞)
不保留日志
nohup java -jar wx-scheduling-0.0.1-SNAPSHOT.jar     >/dev/null 2>&1 &
保留日志
nohup java -jar wx-scheduling-0.0.1-SNAPSHOT.jar     > out.log 2>&1 &
设置jvm参数
nohup java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar 你的jar包 >/dev/null &

Linux 运行jar包命令如下:

       1.查看进程:

ps aux |grep xxx.jar

ps -ef |grep xx.jar
补充:

1.jps

控制台列举出的就是当前运行的java进程

2.查看某个端口是否被占用:

netstat -anp|grep 端口号

      2.杀死进程

kill -9 22222(进程id)

     当然也可以用kill -15 

     3.区别如下:

kill -9 PID 是操作系统从内核级别强制杀死一个进程.

kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭.

当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。

这时候,应用程序可以选择:

1、立即停止程序
2、释放响应资源后停止程序
3、忽略该信号,继续执行程序
因为kill -15信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。这也就是为什么我们有的时候使用kill命令是没办法"杀死"应用的原因,因为默认的kill信号是SIGTERM(15),而SIGTERM(15)的信号是可以被阻塞和忽略的。和kill -15相比,kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。所以,相比于kill -15命令,kill -9在执行时,应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等。

方式一:

java -jar XXX.jar
特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出

那如何让窗口不锁定?

方式二

java -jar XXX.jar &

&代表在后台运行。

特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

继续改进,如何让窗口关闭时,程序仍然运行?

方式三

nohup java -jar XXX.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

方式四

nohup java -jar XXX.jar >temp.txt &

解释下>temp.txt

command >out.file

command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

可通过jobs命令查看后台运行任务

jobs

那么就会列出所有后台执行的作业,并且每个作业前面都有个编号。
如果想将某个作业调回前台控制,只需要 fg + 编号即可。

fg 23

补充:

bg
将一个在后台暂停的命令,变成继续执行

ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐