什么是nohup
nohup是 no hang up 的缩写,可以理解为不中断
nohup :👉 如果你正在运行一个进程,并且在你退出链接时还想继续运行此进程,那么可以使用nohup命令。该命令可以让你在退出账户或者关闭终端链接之后可以继续在运行相应的进程。
案例
比如我想运行一个java项目,正常的启动直接是java -jar xxx.jar
这样会运行一个jar文件。但是这种运行方式有个弊端,那就是在我们退出终端链接的时候他会干掉这个进程。
不中断运行jar
这时候我们可以运行nohup java -jar xxx.jar
此时我们没有加任何后缀,nohup会默认将需要的日志输出在一个nohup.out这个文件中。这时我们在退出终端依然可以访问到我们刚才启动的java项目。但是注意,此时进程并不是在后台运行,他只是不中断。
自定义输出日志
nohup可以让我们自定义输出的日志,只需要加几个参数就可以
-
只记录异常日志
nohup java -jar xxx.jar >dev/null 2>error.log 2>&1 &
# 表示将错误日志信息输出到error.log文件中,其他信息则丢弃到/dev/null
-
不记录任何日志
nohup java -jar xxx.jar >dev/null 2>&1 &
# 表示将错误信息重定向到标准输出,其他信息则丢弃到/dev/null
-
参数解释
-
dev/null: 属于空文件设备。可以理解为不存在或者是一个垃圾箱🚮。所有输出进去的文件都会被丢弃,也就是写入的内容都会消失。
-
Linux的重定向
-
0:表示标准输入代码,使用>或者>>
-
1:表示标准输出代码,使用>或者>>
-
2:表示错误信息输出代码,使用2>或者2>>
>: 覆盖输出 >>:追加输出 2>: 重定向错误输出 2>>: 追加方式
-
-
后台运行
& : 指在后台运行
nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
用法
# 在后台运行xxx.jar,可以使用标准输入,终端能够接收任何输入,日志文件输出到默认nohup.log
nohup javar -jar xxx.jar &