nohup
和 &
使用方法
nohup
是no hung up
的缩写,意思是不挂断 。
nohup 语法格式:
nohup command [arg...]
说明:
例如: 执行 nohup sh test.sh
脚本命令后,终端不能接收任何输入,标准输出 会输出到当前目录的 nohup.out
文件。即使关闭xshell退出后,当前session依然继续运行。
&
(可交互)&
语法格式:
command [arg...] &
说明:
例如:
执行 sh test.sh &
脚本命令后 ,关闭 xshell,脚本程序也立刻停止。
nohup
和 &
一块使用(不挂断,可交互)语法格式:
nohup command [arg...] &
说明:
例子: 执行 nohup sh test.sh &
命令后,能进行输入操作,标准输出的日志写入到 nohup.out
文件,即使关闭xshell,退出当前session后,脚本命令依然继续运行。
>
上面提到的日志文件默认名称是 nohup.out
,如果修改日志文件的名称,则用到重定向 ,符号是 >
,语法格式是
> logFile
说明:
>
是重定向的符号。logFile
是日志文件名称,最好是英文、数字。此时, nohup
、 &
、 >
三者一块使用的 语法格式 :
nohup command >logFile &
示例:
nohup start.sh > aa.log &
说明:执行上面的命令后,可以进行输入,也能在后台运行,运行的日志输出到 aa.log
日志中。
nohup command >logFile &
虽然解决输入输出,后台也能运行问题,但是还有一项是错误信息无法输出到 日志文件中,要解决这个问题,需要增加命令 2 > file
。
标准输出 和 错误信息 同时使用,语法格式如下:
>logFile1 2 >logFile2
Linux 标准输入、输出、错误信息的符号:
0
表示 stdin (standard input)
标准信息输入 ;1
表示 stdout (standard output)
标准信息输出 ;2
表示 stderr (standard error)
错误信息 ;/dev/null
表示空设备文件。 如果不想输出任何的日志时,使用此参数 。
再来回顾上面的示例:
logFile1 2 >logFile2
> logFile1
:即 1 >logFile1
,1
是标准信息输出,是默认的,可以省略,logFile1
是 日志文件名字。2 >logFile2
:2
是错误信息,即将 错误信息 输出 到 logFile2
文件中 。如果想把 错误信息 和 标准输出 在同一个文件中 ,使用 2>&1
。 语法如下:
>logFile 2>&1
说明:
>logFile
表示 标准信息 输出到 logFile
文件中;2>&1
表示 把 2
(错误信息) 重定向, 输出到 1
(标准输出) 中 。 两者的共同使用,表示 把 2
(错误信息) 、1
(标准输出) 都输出到同一个文件(logFile
)中。综上所述, 功能最全、推荐语法如下:
nohup command >logFile 2>&1 &
示例:
nohup start.sh > mySysLog.log 2>&1 &
说明: 执行命令后,并且将 标准输出(1)、错误信息(2) 写入到 mySysLog.log 文件中。