Linuxshell命令中nohup、、重定向的使⽤
⽂章⽬录
⼀、nohup 和&使⽤⽅法
1.1、nohup(不挂断)
nohup 是 no hung up 的缩写,意思是不挂断 。
使⽤ Xshell 等Linux 客户端⼯具,远程执⾏ Linux 脚本时,有时候会由于⽹络问题,导致客户端失去连接,终端断开,脚本运⾏⼀半就意外结束了。这种时候,就可以⽤nohup 指令来运⾏指令,使脚本可以忽略挂起,仍可继续运⾏。
nohup 语法格式:
nohup ]
说明:
除了⽆法进⾏输⼊操作(⽐如输⼊命令、换⾏、打空格等) 外 ,
标准输出 保存到 nohup.out⽂件中。
关闭客户端后,命令仍然会运⾏,不会挂断。
例如:
执⾏ nohup sh test.sh 脚本命令后,终端不能接收任何输⼊,标准输出 会输出到当前⽬录的nohup.out ⽂件。即使关闭xshell 退出后,当前session依然继续运⾏。
1.2、&(可交互)
& 语法格式:
]&
说明:
能进⾏输⼊操作(⽐如输⼊命令、换⾏、打空格等),即 可进⾏交互 输⼊和输出的操作。
标准输出 保存到 nohup.out⽂件中。
但是 关闭客户端后,程序会就马上停⽌。
例如:
执⾏ sh test.sh & 脚本命令后 ,关闭 xshell,脚本程序也⽴刻停⽌。
1.3、nohup和&⼀块使⽤(不挂断,可交互)
语法格式:
nohup ]&
说明:
能进⾏输⼊操作(⽐如输⼊命令、换⾏、打空格等),即 可进⾏交互 输⼊和输出的操作,
标准输出 保存到 nohup.out 中,
关闭客户端后命令仍然会运⾏。
例⼦:
执⾏ nohup sh test.sh & 命令后,能进⾏输⼊操作,标准输出 的⽇志写⼊到 nohup.out ⽂件,即使关闭xshell,退出当前session后,脚本命令依然继续运⾏。
输⼊输出问题已经解决了, 是不是就完美了? 其实还有⼀个问题没有解决, 请往下看!
⼆、⽇志的重定向>
上⾯提到的⽇志⽂件默认名称是 nohup.out ,如果修改⽇志⽂件的名称,则⽤到 重定向 ,符号是 > ,语法格式是
> fileLog
说明:
> 是重定向的符号。
fileLog 是⽇志⽂件名称,最好是英⽂、数字。
此时, nohup、 & 、 > 三者⼀块使⽤的 语法格式 :
nohup command >fileLog &
⽰例:
nohup start.sh >aa.log &
说明:执⾏上⾯的命令后,可以进⾏输⼊,也能在后台运⾏,运⾏的⽇志输出到 aa.log ⽇志中。
三、错误信息的处理
nohup command >fileLog &
虽然解决输⼊输出,后台也能运⾏问题,但是还有⼀项是 错误信息 ⽆法输出到 ⽇志⽂件中,要解决这个问题,需要增加命令 2 > file 。标准输出 和 错误信息 同时使⽤,语法格式如下:
>fileLog1 2 >fileLog2
有⼈会疑问,2 是什么意思? 请往下看。
3.1、Linux 标准输⼊、输出、错误信息的符号
Linux 标准输⼊、输出、错误信息的符号:
0 表⽰ stdin (standard input) 标准信息输⼊ ;
1 表⽰ stdout (standard output) 标准信息输出 ;
2 表⽰ stderr (standard error) 错误信息 ;
linux循环执行命令脚本/dev/null 表⽰空设备⽂件。 如果不想输出任何的⽇志时,使⽤此参数 。
再来回顾上⾯的⽰例:
>fileLog1 2 >fileLog2
> fileLog1 :即 1 >fileLog1,1是标准信息输出,是默认的,可以省略,fileLog1是 ⽇志⽂件名字。
2 >fileLog2 :2 是错误信息,即将 错误信息 输出 到 fileLog2 ⽂件中 。
到这时,明⽩ 2 含义了吧!
3.2、错误信息和标准输出输出在同⼀个⽂件中
如果想把 错误信息 和 标准输出 在同⼀个⽂件中 ,使⽤ 2>&1 。 语法如下:
>fileLog 2>&1
说明:
>fileLog 表⽰ 标准信息 输出到 fileLog ⽂件中;
2>&1 表⽰ 把 2(错误信息) 重定向, 输出到 1(标准输出) 中 。
两者的共同使⽤,表⽰ 把 2(错误信息) 、1(标准输出) 都输出到同⼀个⽂件(fileLog)中。
3.3、思考:不想输出⽇志信息怎么办?
提⽰:/dev/null 表⽰空设备⽂件。 如果不想输出任何的⽇志时,使⽤此参数 。
四、综合使⽤(推荐)
综上所述, 功能最全、推荐语法如下:
nohup command>fileLog 2>&1 &
⽰例:
nohup start.sh > mySysLog.log 2>&1 &
说明: 执⾏命令后,并且将 标准输出(1)、错误信息(2) 写⼊到 mySysLog.log ⽂件中。
五、知识扩展
5.1、不停⽌服务,直接清空nohup.out
如果脚本⼀直运⾏下去,nohup.out ⽇志会⼀直增长,⽇志但是硬盘容量有限,怎么把⽇志⽂件的⼤⼩减少 ?
注意,千万别直接删除⽇志⽂件,会造成服务⽆法输出⽇志,服务异常直接停⽌运⾏,这是最严重⽣产事故。
不停⽌服务,直接清空nohup.out⽂件有两种⽅法:
# 第1种:
cat /dev/null > nohup.out
# 第2种:
cp /dev/null nohup.out
5.2、只记录警告级别⽐较⾼的⽇志
输出的⽇志太多,nohup.out 增长特别快,对于不重要的⽇记,可以不记录,选择只记录警告级别⽐
较⾼的⽇志。# 只输出错误信息到⽇志⽂件,其它⽇志不输出
nohup ./program > /dev/null 2>log &
5.2、不想输出⽇志
不想输出⽇志,什么⽇志都不要,只要服务能正常运⾏就⾏了。
# 什么⽇志也不输出
nohup ./program > /dev/null 2>&1 &
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论