nohup
是 no hungup 的缩写,意思是不挂断 。
我们在使用 Xshell 等工具,远程执行 Linux 脚本时,有时候会由于网络问题,导致客户端失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用nohup
指令来运行指令,使程序可以忽略挂起信号继续运行。
语法格式:
nohup command [arg...] [&]
nohup
只使用 nohup
,即 nohup command [arg...]
,
无法标准输入(即控制台无法输入),标准输出 和 错误信息保存到 nohup.out
文件里面,关闭客户端后,命令仍然会运行。
例如:
执行 nohup sh test.sh
脚本命令后,终端不能接收任何输入,标准输出 和 标准错误 会输入到当前目录的nohup.out
文件。即使关闭xshell 退出后,当前session依然继续运行。
&
只使用 &
,即 command [arg...] [&]
,
可以标准输入(控制台可以输入内容,可以交互),但无法将 标准输出 和 错误信息 输入到文件中。关闭客户端后,命令会就马上停止。
例如:
执行 sh test.sh &
脚本命令后 ,关闭 xshell,对应的任务也立刻停止。
nohup
和 &
一块使用(推荐使用)nohup 和 &
一块使用 ,即 nohup command [arg...] &
,
可以标准输入(即控制台能输入文本进行交互),也能将 标准输出 和 错误信息 输出信息保存到 nohup.out
中,关闭客户端后命令仍然会运行。
例子1:
执行 nohup sh test.sh &
命令后,既能标准输入,就是终端能够接收任何输入,也能将 标准输出 和 错误信息 的日志输入到 nohup.out
文件,即使关闭xshell,退出当前session依然继续运行。
例子2:
nohup ./startWeblogic.sh &
,即使退出ssh界面,命令仍然在后台执行,并且将日志打印到 nohup.out
文件中。
nohup command [arg...] [&]
nohup command [arg...]
命令,忽略所有挂断信号;&
,即 nohup command [arg...] &
。nohup.out
文件中,也可以使用 >file.log
重定义日志文件。nohup.out
文件不可写,则重定向到 $HOME/nohup.out
文件中。nohup
、 &
、 >
(推荐使用)上面提到的日志文件是 nohup.out
,如果将日志输入到其他文件中时,这时用到了 重定向
,语法格式是 > 日志文件名
。
nohup
、 &
、 >
三者一块使用的 语法格式 :
nohup command >file 2>&1 &
上面命令可以拆分成三部分 nohup command &
、 >file
和 2>&1
。
nohup command &
:上面已经说过,就是后台运行命令;
>file
:将日志(即 标准输出(1)
) 输出到 file 文件中 。
参数说明:
1) >
:重定向的符号,
2) file
:日志文件名称。
3) >file
: 将日志 重定向 写入到 file
文件中。
2>&1
是将 错误信息(2)
重定向到 标准输出(1)
。
而 标准输出(1)
是输入到 file 文件中,所以 错误信息(2)
、 标准输出(1)
都 写入到 file 文件中。
相关的参数说明:
/dev/null
表示空设备文件。不输出任何的日志时,使用此参数。
0
表示 stdin (standard input) 标准输入,
1
表示 stdout (standard output) 标准输出,
2
表示 stderr (standard error) 标准错误信息;
2>error
:将 错误信息(2)
重定向 到 error
文件中 ;
2>&1
: 将 错误信息(2)
重定向 到 标准输出(1)
;
2>&1 >file
:错误信息(2)
重定向 到 标准输出(1)
,而 标准输出(1)
输入到 file 中,也就是 错误信息(2)
、标准输出(1)
都输入到file 中,等于 1>file 2>&1
。
例子:
nohup starMailWeb.sh >mail.log 2>&1 &
后台运行 starMailWeb.sh
,并且将 标准输出(1)
、标准错误(2)
等日志 写入到 mail.log 文件中。
如果命令一直运行下去,nohup.out会一直自己增长下去,如果你的服务器硬盘不给力的话,很容易把应用也挂掉(硬盘没空间 ,啥都玩不转),但是又不能一味的直接删。因为直接删除,可能会造成应用无法打印后续的错误日志,该问题常见于weblogic服务器,jboss服务器等这些大型中间件,这个在生产环境上要尤为注意。
因此就有了我们不停止服务直接,清空nohup.out文件的方法。
下面是两个种不用停止WEB服务就可以清空nohup.out的命令。
第一种:cp /dev/null nohup.out
第二种:cat /dev/null > nohup.out
nohup 的重定向,一劳永逸解决 nohup.out 文件过大的问题
以下是定义日志打印级别,除了高于级别2的告警信息记录到log文件外,其余直接不记录
//只输出错误信息到日志文件
nohup ./program >/dev/null 2>log &
//什么信息也不要
nohup ./program >/dev/null 2>&1 &