一、Windows
环境
找到jar
包的位置;
按shift
键,点击鼠标右键,选中在此处打开PowerShell窗口
;
此时进入命令行工具 输入java -jar .\java_web-0.0.1-SNAPSHOT.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 &
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:标准错误流(默认是屏幕)
名称 | 代码 | 操作符 |
|
|
标准输入( | 0 |
|
|
|
标准输出( | 1 |
|
|
|
标准错误输出( | 2 |
|
|
|
从上表看出,平常使用的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 &