一、Windows环境

找到jar包的位置;

shift键,点击鼠标右键,选中在此处打开PowerShell窗口

此时进入命令行工具 输入java -jar .\java_web-0.0.1-SNAPSHOT.jar(注意空格)。

Java jar包启动命令 包含启动参数_jar

二、Linux环境

2.1 方式一

java -jar XXX.jar

特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出。

2.2 方式二

java -jar XXX.jar &

&代表在后台运行。

特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

2.3 方式三

nohup java -jar XXX.jar &

nohup意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。

当用nohup命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

2.4 方式四

nohup java -jar XXX.jar >temp.txt &

解释下>temp.txt

command >out.file

command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

2.5 方式五

nohup java -jar XXX.jar > springboot.log 2>&1 &

Java jar包启动命令 包含启动参数_jar_02

2.6 方式六

nohup java -jar spring-boot-demo.jar > /dev/null 2>&1 &

不输出日志。

三、nohup&

使用&后台运行程序:

  • 结果会输出到终端
  • 使用Ctrl + C,程序免疫
  • 关闭session,程序关闭

使用nohup运行程序:

  • 结果默认会输出到nohup.out
  • 使用Ctrl + C,程序关闭
  • 关闭session,程序免疫

平日线上经常使用nohup&配合来启动程序。

四、> /dev/null 2>&1

  • > 标准重定向符,允许我们创建一个0KB的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。
  • /dev/null可以看作黑洞,等价于一个只写文件。所有写入它的内容都会永远丢失,尝试从它那儿读取内容则什么也读不到。也就是将所有产生的日志将被丢弃。
  • 2>&1符号>&是一个整体代表将标准错误2重定向到标准输出1,如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流。

先了解下1和2在Linux中代表什么?

Linux执行一个程序时,会自动打开三个流:

  • 0:标准输入流(默认是键盘)
  • 1:标准输出流(默认是屏幕)
  • 2:标准错误流(默认是屏幕)

名称

代码

操作符

java中表示

Linux中文件描述符

标准输入(stdin)

0

<<<

System.in

/dev/stdin -> /proc/self/fd/0 -> /dev/pts/0

标准输出(stdout)

1

>, >>,1>1>>

System.out

/dev/stdout -> /proc/self/fd/1 -> /dev/pts/0

标准错误输出(stderr)

2

2>2>>

System.err

/dev/stderr -> /proc/self/fd/2 -> /dev/pts/0

从上表看出,平常使用的echo 'hello' > a.log可以写成echo 'hello' 1> a.log

为什么2>&1要放在后面?

如下一条shell命令nohup java -jar app.jar >log 2>&1 &我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

本来1----->屏幕 (1指向屏幕)

执行>log后, 1----->log (1指向log

执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log

再来分析下nohup java -jar app.jar 2>&1 >log &

本来1----->屏幕 (1指向屏幕)

执行2>&1后, 2----->1(2指向1,而1指向屏幕,因此2也指向了屏幕)

执行>log后, 1----->log(1指向log,2还是指向屏幕)

所以这就不是我们想要的结果。

每次都写>log 2>&1太麻烦,能简写吗?可以简写成&>log>&log

nohup java -jar app.jar >log 2>&1 &简写成:nohup java -jar app.jar &>log &