Linux后台执行命令:nohup 和 & 的使用说明

nohup 命令说明

nohup 是 no hungup 的缩写,意思是“不挂断”。

我们在使用Xshell等工具,远程执行Linux脚本时,有时候会由于网络问题,导致失去连接,终端断开,程序运行一半就意外结束了。这种时候,就可以用``nohup` 指令来运行指令,使程序可以忽略挂起信号继续运行。

语法:

nohup Command [ Arg ... ] [ & ]
  • nohup 命令运行由 Command 参数Arg参数 指定的命令,忽略所有挂断(SIGHUP)信号。

  • 如果想要在运行后台中的 nohup 命令,则要添加 & ( 表示 “and” 的符号)到命令的尾部。

  • 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

1、只使用 nohup

示例:nohup sh test.sh

说明:会关闭标准输入(控制台无法输入),标准输出 和 错误信息保存到 nohup.out 文件里面,关闭客户端后命令仍然会运行。

例如:

nohup sh test.sh 任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out 文件,即使关闭xshell退出当前session依然继续运行。

2、只使用 &

示例:sh test.sh &

说明:不会关闭标准输入(控制台可以输入),但会丢失 标准输出 和 错误信息,关闭客户端后命令会就马上停止。

例如:

sh test.sh & 任务放到后台 ,关闭 xshell,对应的任务也跟着停止。

3、使用 nohup 和 & (推荐使用)

语法:

nohup Command [ Arg ... ] [ & ]

示例:nohup sh test.sh &

说明: 不会关闭标准输入(控制台可以输入),也不会丢失标准输出和错误信息,并将输出信息保存到 nohup.out 中,关闭客户端后命令仍然会运行。

例如:

nohup sh test.sh & 任务放到后台,但是可以使用标准输入,终端能够接收任何输入,标准输出 和 错误信息 默认保存到当前目录下的nohup.out 文件,即使关闭xshell退出当前session依然继续运行。

例子: nohup ./startWeblogic.sh & 意思是即使退出ssh界面,命令仍然在后台执行,并且打印日志到 nohup.out 文件中,当然也可以将nohup.out 的输出转向到其他文件。

4、输出重定向(推荐使用)

使用 nohup sh test.sh & 命令时,默认是将信息输出到 nohup.out 文件中。 但是在实际工作中,我们想把日志信息输出到某个具体文件中,可以下面的命令。

示例:nohup command > out.file 2>&1 &

示例说明:

  • command > out.file 是将 command的信息 重定向out.file 文件,即输出内容 不打印到屏幕上,而是输出到 out.file 文件中。
  • 2>&1 是将 标准错误(2) 重定向到标准输出(&1),标准输出(&1)再被 重定向 输入到 out.file 文件中。

例子:

nohup abc.sh > nohup.log 2>&1 &

将 标准输出(1)、标准错误(2) 重定向到 nohup.log 文件中。

参数说明:

  • /dev/null 表示空设备文件,

    0 表示 stdin (standard input) 标准输入,

    1 表示 stdout (standard output) 标准输出,

    2 表示 stderr (standard error) 标准错误信息;

  • > file 表示将 标准输出(1) 输出到 file文件,也就相当于 1>file

    2>error 表示将 错误信息(2) 重定向到 error文件中 ;

    2>&1 也就表示将 错误信息(2) 重定向 到 标准输出(1) ;

    2>&1 >file :错误信息(2) 重定向 到 标准输出(1) ,标准输出(1) 重定向 到 文件file ,等于 1> file 2>&1 ,即 标准输出(1) 重定向 到 file文件中,错误信息(2) 重定向 到 标准输出(1) 。

    & 放在命令到结尾,表示后台运行,防止终端一直被某个进程占用,这样终端可以执行别到任务,配合 >file 2>&1 可以将 log信息保存到某个文件中,但如果终端关闭,则进程也停止运行。如 command > file.log 2>&1 & 。 ( 参考 2、只使用 &

5、知识扩展

5.1、清空 nohup.out

如果命令一直运行下去,nohup.out会一直自己增长下去,如果你的服务器硬盘不给力的话,很容易把应用也挂掉(硬盘没空间 ,啥都玩不转),但是又不能一味的直接删。因为直接删除,可能会造成应用无法打印后续的错误日志,该问题常见于weblogic服务器,jboss服务器等这些大型中间件,这个在生产环境上要尤为注意。

因此就有了我们不停止服务直接,清空nohup.out文件的方法。
下面是两个种不用停止WEB服务就可以清空nohup.out的命令。

第一种:cp /dev/null nohup.out
第二种:cat /dev/null > nohup.out

5.2、解决 nohup.out 文件过大

nohup 的重定向,一劳永逸解决 nohup.out 文件过大的问题
以下是定义日志打印级别,除了高于级别2的告警信息记录到log文件外,其余直接不记录

//只输出错误信息到日志文件
nohup ./program >/dev/null 2>log &

//什么信息也不要
nohup ./program >/dev/null 2>&1 &

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/88991768