目录

Linux后台运行Java程序命令详解

目录

Linux后台运行Java程序命令详解

nohup java -jar -Xms512m -Xmx512m app3.jar > /var/log/java/app3.log 2>&1 &

上面是后台运行Java程序,并将日志输出到 /var/log/java/app3.log 的Linux命令,本文将详细分析此命令。

启动jar包

java -jar -Xms512m -Xmx512m app3.jar 这条命令是运行app3.jar,并将最大堆内存、最小堆内存设置为512m。

输出与输出重定向

重定向命令列表

命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command » file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n » file将文件描述符为 n 的文件以追加的方式重定向到 file。

新建一个 file01.txt 文件,并填写一些内容。

vim file01.txt

输入 abcdefg

执行 cat file01.txt > file_new.txt 命令,cat命令的输出重定向到file_new.txt。

执行 cat not-exit-file.txt > not-exit-new.txt 命令,not-exit-file.txt 文件不存在,提示信息“cat: not-exit-file.txt: 没有那个文件或目录”是一个标准错误输出,而标准错误输出并没有重定向到 not-exit-new.txt

https://i-blog.csdnimg.cn/blog_migrate/e9057053e2130fce1c5c1e614c342196.png

在Linux运行一个shell命令行时通常会自动打开三个标准文件:

标准输入文件(stdin),文件描述符为0,通常对应终端的键盘,进程将从标准输入文件中得到输入数据。

标准输出文件(stdout),文件描述符为1,正常输出数据输出到标准输出文件。

标准错误输出文件(stderr),文件描述符为2,错误信息输出到标准错误文件中。

符号是将文件描述符为1的输出重定向到文件中,而 cat not-exit-file.txt 得到的是一个标准错误输出,如果要将标准错误输出重定向到文件,这要使用 2> 符号

cat not-exit-file.txt 2> not-exit-new.txt

https://i-blog.csdnimg.cn/blog_migrate/ba5c468790c0d2fb6f7c072511a546d6.png

如果要将标准输出和标准错误输出都重定向到文件,可使用 command > file 2>&1 命令。

java -jar -Xms512m -Xmx512m app3.jar

/var/log/java/app3.log 2>&1 此命令便是运行app3.jar,并将标准输出和标准错误输出重定向到 /var/log/java/app3.log

后台启动 &

在终端运行某个命令时,终端被该命令占据,可以在命令后面加上 & 实现后台运行。

java -jar -Xms512m -Xmx512m app3.jar > /var/log/java/app3.log 2>&1 & 这条命令便是后台运行app3.jar

但这种启动方式有缺陷,使用&启动的后台进程与终端关联,当用户注销(logout)或者网络断开时,终端会收到Linux HUP信号(hangup)从而关闭终端,并且关闭其所有子进程。

nohup不挂起( no hang up)

使用nohup命令可以使得进程忽略HUP信号,即便终端关闭了,nohup启动的进程也不会被关闭。

nohup java -jar -Xms512m -Xmx512m app3.jar > /var/log/java/app3.log 2>&1 &

总结

nohup java -jar -Xms512m -Xmx512m app3.jar > /var/log/java/app3.log 2>&1 &

这条命令的作用是:让app3.jar在后台运行,将标准输出、标准错误输出重定向到/var/log/java/app3.log,并且忽略HUP信号,终端关闭时,本进程不关闭。