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
在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
如果要将标准输出和标准错误输出都重定向到文件,可使用 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信号,终端关闭时,本进程不关闭。