详解jar包的启动命令

  • Post author:
  • Post category:其他


通常我们在启动SpringBoot项目的的jar包时,会使用以下命令

nohup java -jar xxxx.jar >log.log 2>&1 &

整条命令由linux中的bash进行解释执行,一般我们在执行某些应用程序时会使用 nohup command & 如:

nohup python3 xxx.py &
nohup java -jar xxx.jar &


1.nohup

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。


2.&

用途:在后台运行

再来看

java -jar xxx.jar

如果我们使用上面的命令直接启动jar包,会在屏幕直接打印启动的信息及程序内的输入输出信息,如下

并且直接使用Ctrl + C 会中止程序的运行

再结合nohup及& 使用

nohup java -jar xxx.jar &

会将原本在屏幕直接打印的内容重定向到nohup.out 的文件中。


3.重定向

在linux系统中一切皆文件,就是说java -jar 也是一个文件,是文件就会有文件描述符FD,在liunx中每个文件都有3个固定的文件描述符0,1,2

其中0 可以理解为Java中的System.in;1可以理解为Java中的System.out ;2可以假定为一个System.error 即产生错误后的输出流,如图所示

注意图中FD下的 0u 1u 2u 分别指的是我们刚才描述的三种类型的描述符,后面的字母代表当前流的状态有三种u r w ,u代表双向的读写,r代表读,w代表写

1>log.log 2<log.log 2>&1

上面代码中,< 代表输入定向 > 代表输出定向  两种命令符号的左边均是要重定向的类型,中间不能有空格,右边为定位的终止端。比较特殊的是 2>&1是将error输出流重定向到out输出流,且1前面加上&。可以在虚拟机中做如下测试(都是基本的linux常用命令)


4.完整解读

综上我们再看整条的启动命令

nohup java -jar xxxx.jar >log.log 2>&1 &

nohup & 将xxx.jar 以后台运行的方式启动,并将java -jar 产生的输出重定向到log.log文件中。

注意 : > log.log 只是重定向了正常的输出流,我们还要将发生错误的输出流2重定向到正常的输出流1中。



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