nohup java -jar后台启动,参数"> /dev/null 2>&1"的含义。

  • nohup命令
  • 语法格式
  • 参数说明
  • 实例
  • "> /dev/null 2>&1"
  • >:将流输出到文件
  • /dev/null:这个文件是一个无底洞,无法打开,相当于是一个垃圾站。
  • 2>&1:代表将标准错误2重定向到标准输出1
  • 为什么要这样写,我们看一下其它写法:
  • "2>&1 > /dev/null"
  • "> /dev/null 2 > /dev/null"
  • 另外说一句>和>>的区别
  • 1 >
  • 1 >>


nohup命令

用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下。

语法格式

nohup Command [ Arg … ] [ & ]

参数说明

Command: 要执行的命令。
Arg: 一些参数,可以指定输出文件。
&: 让命令在后台执行,终端退出后命令仍旧执行。

实例

nohup java -server -Xms512m -Xmx512m -XX:PermSize=64m -jar xxx.jar --spring.profiles.active=test > /dev/null 2>&1 &

-server -Xms512m -Xmx512m -XX:PermSize=64m
指定内存大小

xxx.jar
你的jar包名称

–spring.profiles.active=test
运行环境为test

> /dev/null 2>&1
忽略输出文件

“> /dev/null 2>&1”

这是我们今天主要说的部分。

通常情况下,总是有三个文件会被打开。它们各自对应的流:

0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr

>:将流输出到文件

同:1 >,默认情况下就是1,即标准输出,一般都省略。

/dev/null:这个文件是一个无底洞,无法打开,相当于是一个垃圾站。

也就是将所有产生的日志都丢弃,因为我们项目中logback.xml已经指定了日志的格式和输出位置。

2>&1:代表将标准错误2重定向到标准输出1

标准输出和标准错误都输出到/dev/null。如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流。

为什么要这样写,我们看一下其它写法:

“2>&1 > /dev/null”

标准错误先重定向到标准输出,此时标准输出还是在终端,> /dev/null后标准输出流输出到文件,但是标准错误仍在终端。

“> /dev/null 2 > /dev/null”

这样写可以达到我们想要的目的,但是这样会有一个问题,标准输出流1和标准错误流2都将各自输出到文件,文件会被打开两次。从效率上讲,原来的写法要更高效。

另外说一句>和>>的区别

1 >

将标准输出流输出到文件,覆盖文件原有内容。

1 >>

将标准输出流输出到文件,追加到文件的末尾。