前言

一直就知道 java -jar xx ctrl+c就退出了,一下是nohub使用方式,虽然本人一直用的screen ,但是实际情况是生成环境服务器没装这个还没外网。

示例1

java -jar XXX.jar &
解释

命令结尾没有 “&” ,则变成 “java -jar XXX.jar ” ,表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出
命令结尾添加 “&” ,则变成 “java -jar XXX.jar &” ,表示在当窗口关闭时,程序才会中止运行。&代表让该命令在后台执行。

示例2

nohup java -jar XXX.jar > Log.log & 
或者
nohup java -jar XXX.jar >> Log.log &
解释

命令 "nohup java -jar XXX.jar &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。注意,该作业的所有输出被重定向到nohup.out的文件中。
命令 "nohup java -jar XXX.jar > Log.log &" 部分,表示不挂断运行命令,当账户退出或终端关闭时,程序仍然运行,并且该作业的所有输出被重定向到Log.log的文件中。“ > Log.log ” 该命令就是指定日志输出的文件。
">>"表示将输出以追加的方式重定向到Log.log中。

示例2

nohup java -jar XXX.jar > Log.log 2>&1 &
或者
nohup java -jar XXX.jar >> Log.log 2>&1 &
或者
nohup java -jar XXX.jar > /dev/null 2>&1 &
解释

标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
屏蔽输出,起到禁止输出作用:/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
“> Log.log 2>&1” :表示将 stdout 和 stderr 合并后重定向到 Log.log

示例:

nohup java -jar BiuBiuBiu.jar >output 2>&1 &
解释:
1. 带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上);
2. 2>&1的意思

  这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.

  这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因了

最后谈一下/dev/null文件的作用,这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里 ./start.sh >/dev/null 2>&1

一般不需要查看日志的就直接丢掉丢掉

nohup java -jar BiuBiuBiu.jar >/dev/null 2>&1 &
备注:输出之后,可以使用“jobs”查看一下后台运行的任务。

Q.E.D.


生命在于折腾