nohup命令重定向标准输出和错误输出
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
nohup命令重定向标准输出和错误输出
命令:command > /dev/null 2>&1 &
输出到/dev/null表⽰输出重定向到⿊洞,即输出内容不打印到屏幕上,null是/dev下空设备⽂件。
> :代表重定向到哪⾥,例如:echo "123" > ./123.txt
1 :表⽰stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 :表⽰stderr标准错误
& :表⽰等同于的意思,2>&1,表⽰2的输出重定向等同于1
⼀. 依据上⾯所述,下⾯两种输出效果⼀致:
[root@guangzhou study]# cat print.php
<?php
echo"hello,world\";
[root@guangzhou study]# php print.php > print.log
[root@guangzhou study]# php print.php 1> print1.log
[root@guangzhou study]# cat print.log
hello,world.
[root@guangzhou study]# cat print1.log
hello,world.
完整命令: command 1> ⽇志⽂件 (或者 command > ⽇志⽂件)
⼆. 现在尝试标准错误输出,故意修改造成print.php⽂件报语法错误,执⾏代码后打印两个⽇志⽂件均为空。
[root@guangzhou study]# cat print.php
<?php
//echo "hello,world.\n";
aaa "hello,world.\n";
[root@guangzhou study]# php print.php 1> print1.log
PHP Parse error: syntax error, unexpected '"hello,world.\n"' (T_CONSTANT_ENCAPSED_STRING) in /opt/www/study/print.php on line 3 [root@guangzhou study]# php print.php > print.log
PHP Parse error: syntax error, unexpected '"hello,world.\n"' (T_CONSTANT_ENCAPSED_STRING) in /opt/www/study/print.php on line 3 [root@guangzhou study]# cat print.log
[root@guangzhou study]# cat print1.log
可见标准输出不能程序的错误输出。
现在改成2使⽤错误输出重定向错误⽇志,执⾏程序后打印可见错误信息。
[root@guangzhou study]# php print.php 2> print2.log
[root@guangzhou study]# cat print2.log
PHP Parse error: syntax error, unexpected '"hello,world.\n"' (T_CONSTANT_ENCAPSED_STRING) in /opt/www/study/print.php on line 3
现在我们知道标准输出和错误输出各⾃使⽤场景。
(注意: 重定向符号“>”前的数字1/2中间必须在⼀起,中间不能有空格,不然重定向失败。
)
完整命令: command 2> ⽇志⽂件
另外可以将错误输出重定向到标准输出的⽇志⽂件中:
[root@guangzhou study]# cat print.php
<?php
//echo "hello,world.\n";
aaa "hello,world.\n";
[root@guangzhou study]# php print.php > print.log 2>&1[root@guangzhou study]# cat print.php
<?php
echo"hello,world.\n";
[root@guangzhou study]# php print.php > print2.log 2>&1
[root@guangzhou study]# cat print.log
PHP Parse error: syntax error, unexpected '"hello,world.\n"' (T_CONSTANT_ENCAPSED_STRING) in /opt/www/study/print.php on line 3 [root@guangzhou study]# cat print2.log
hello,world.
完整命令: command > ⽇志⽂件 2>&1
三. 有时程序可能要跑好⼀会,当前命令⾏窗⼝需要处理其他事情的情况下,可以在命令末尾加上“&”符号,下⾯脚本⼀开始休眠10秒钟:
[root@guangzhou study]# cat print.php
<?php
sleep(10);
echo"hello,world.\n";
[root@guangzhou study]# php print.php > print.log 2>&1 &
[2] 11641
#当前窗⼝可执⾏其他命令,如date命令
[root@guangzhou study]# date
2020年 09⽉ 23⽇星期三10:52:38 CST
[root@guangzhou study]# cat print.log
hello,world.
[2]- 完成 php print.php > print.log 2>&1
完整命令: command > ⽇志⽂件 2>&1 &
四. 上⾯命令末尾加“&”符号只能⽤在窗⼝为关闭的情况,如需要关闭窗⼝后命令继续运⾏的可在命令开始处加上“nohup”符号:
[root@guangzhou study]# cat print.php
<?php
echo date('Y-m-d H:i:s') . "\n";
sleep(50);
echo"hello,world.\n";
echo date('Y-m-d H:i:s') . "\n";
[root@guangzhou study]# date
2020年 09⽉ 23⽇星期三11:06:25 CST
[root@guangzhou study]# nohup php print.php > print.log 2>&1 &
[1] 14164
[root@guangzhou study]# date
2020年 09⽉ 23⽇星期三11:06:32 CST
第⼆个date执⾏后⽴即关闭当前窗⼝,并新开窗⼝打印⽇志,可见两次时间不⾜50秒:
[root@guangzhou study]# cat print.log
nohup: 忽略输⼊
2020-09-2303:02:59
hello,world.
2020-09-2303:03:12
这⾥有⼀点忘记说明,关闭窗⼝前需要执⾏exit,直接关闭窗⼝会导致nohup命令⽆法挂起。
我们重新跑⼀次 cat.php, date, nohup php print.php > print.log 2>&1 &, date, 再加上exit命令,关闭当前窗⼝并新开窗⼝,打印print.log⽂件可以发现时间间隔正好是50秒。
完整命令: nohup command > ⽇志⽂件 2>&1 &
ps: nohup命令是由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断SIGHUP信号。
如果不将 nohup 命令的输出重定向,输出将附加到当前⽬录的 nohup.out ⽂件中。
如果当前⽬录的 nohup.out ⽂件不可写,输出重定向到$HOME/nohup.out ⽂件中。