Linux后台运行Java项目世上最详解

  • Post author:
  • Post category:java




生成jar包并导入Linux中

进入D:\Java\Dubbo\dubbo-admin-master\dubbo-admin文件中,含pom文件的文件夹,在

输入cmd,弹出cmd窗口。

输入命令,会在当前文件夹下的target目录下生成jar包

mvn clean install -Dmaven.test.skip=true

进入taget目录、会看到生成的jar包、将其上传到Linux 的/home/jingdong/app中

在这里插入图片描述



前台启动

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

java -jar XXX.jar & #特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。



后台启动

nohup java -jar test.jar &

#nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
#当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中
#除非另外指定了输出文件。


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

#这种方法会把日志文件输入到你指定的文件中,没有则会自动创建
#解释下 >temp.txt
#command >out.file   
#command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。



jobs命令和 fg /bg命令:

//jobs
#列出所有后台执行的作业,并且每个作业前面都有个编号。
//fg 
#将后台中的命令调至前台继续运行
#如果后台有多个命令,可以用fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
//ctrl + z 
#可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
//bg 
#将一个在后台暂停的命令,变成继续执行(在后台执行)
#如果后台有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
#将任务转移到后台运行:先ctrl + z暂停;再bg,这样进程就被移到后台运行,终端还能继续接受命令。

jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。



查看进程

[root@iZ2ze5lz4uc5ezixqbmvygZ app]# jobs
[1]+  Running                 nohup java -jar dubbo-admin-0.0.1-SNAPSHOT.jar &


#查看占用线程的pid
[root@iZ2ze5lz4uc5ezixqbmvygZ app]# jobs -l
[1]+  829 Stopped                 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

[root@iZ2ze5lz4uc5ezixqbmvygZ app]# ps
  PID TTY          TIME CMD
  720 pts/0    00:00:00 bash
  829 pts/0    00:00:12 java
  989 pts/0    00:00:00 ps

[root@iZ2ze5lz4uc5ezixqbmvygZ app]# jps -l
613 org.apache.zookeeper.server.quorum.QuorumPeerMain
892 sun.tools.jps.Jps
829 dubbo-admin-0.0.1-SNAPSHOT.jar

[root@iZ2ze5lz4uc5ezixqbmvygZ app]# ps -ef  |grep dubbo
root       829   720 18 21:56 pts/0    00:00:10 java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
root       887   720  0 21:57 pts/0    00:00:00 grep --color=auto dubbo


[root@iZ2ze5lz4uc5ezixqbmvygZ app]# netstat -lutnp |grep 7001
tcp6       0      0 :::7001                 :::*                    LISTEN      829/java

[root@iZ2ze5lz4uc5ezixqbmvygZ app]# netstat -nlp |grep 7001
tcp6       0      0 :::7001                 :::*                    LISTEN      829/java            
unix  2      [ ACC ]     STREAM     LISTENING     70017753 30552/AliYunDun      /usr/local/aegis/Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>



前台进程的终止

ctrl+c



后台进程的终止

  • 方法一:

    通过jobs命令查看job号(假设为num),然后执行kill %num
  • 方法二:

    通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
[root@iZ2ze5lz4uc5ezixqbmvygZ app]# jobs
[1]+  Running                 nohup java -jar dubbo-admin-0.0.1-SNAPSHOT.jar &
[root@iZ2ze5lz4uc5ezixqbmvygZ app]# kill %1

kill的其他作用:kill除了可以终止进程,还能给进程发送其它信号,使用kill -l可以察看kill支持的信号。

SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。



版权声明:本文为fox372原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。