在crond任务中,我们经常见到这样的 cron 任务,如下:
00 5 * * * /usr/sbin/ntpdate 222.168.10.10 > /opt/time_cron 2>&1
这条命令的意思是将标准输出和错误输出全部重定向到 /opt/time_cron 文件中,你也可以置空到/dev/null中,也就是将产生的所有信息丢弃,这里需要解释下:
0,标准输入
1, 标准输出(stdout)
2,标准错误输出(stderr)
当然也可以这么写:command > file 2>file,,那么这样和 command > file 2>&1 的区别是:
command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中,这样的写法会将 stdout和 stderr 都直接送到file中, file会被打开两次,这样 stdout 和 stderr 会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道.
command > file 2>&1 的意思就是将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.
注意:
1,从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法。
2,这样写还有一个好处就是,如果后面没有任何重定向,那么该条crond会给系统的root用户发邮件,如果你执行频繁或者输入内容比较多的时候,就要注意了,你的磁盘空间很快会被塞满。
阅读(2118) | 评论(2) | 转发(0) |