我正在阅读一篇关于crontab的文章
有一些关于禁用自动发送电子邮件的功能。
禁用电子邮件 默认情况下,cron 作业会向执行 cronjob 的用户帐户发送一封电子邮件。如果不需要,请将以下命令放在 cron 作业行的末尾。
Run Code Online (Sandbox Code Playgroud)>/dev/null 2>&1
2 > &和的详细意思是1什么?为什么将其放在 crontab 文件的末尾会关闭电子邮件发送功能?
gar*_*Red 250
> 用于重定向
/dev/null 是一个黑洞,任何发送的数据都将被丢弃
2 是标准错误的文件描述符
> 用于重定向
&是文件描述符的符号(没有它,以下1将被视为文件名)
1 是标准输出的文件描述符
因此>/dev/null 2>&1将程序的输出重定向到/dev/null. 包括Standard Error和Standard Out。
Linux 文档项目的I/O 重定向页面提供了更多信息。
cron如果您的工作有一些输出,只会给您发送电子邮件。将所有内容重定向到null,没有输出,因此cron不会向您发送电子邮件。
Cit*_*ght 52
/dev/null是一个充当黑洞的设备文件。无论写入什么,都会被丢弃或消失。当您运行为您提供输出的脚本时,如果我们> /dev/null 2>&1在脚本末尾添加 a ,我们要求脚本将脚本生成的任何内容(输出和错误消息)写入/dev/null.
要分解它:
2 是标准错误的句柄或 STDERR1 是标准输出的句柄或 STDOUT2>&1要求将所有的STDERRas STDOUT,(即将从脚本生成的所有错误消息视为其标准输出)。现在我们已经> /dev/null在脚本的末尾,这意味着所有标准输出 ( STDOUT) 都将写入/dev/null. 因为STDERR现在要STDOUT(因为2>&1)两者STDERR并STDOUT最终进入黑洞/dev/null。换句话说,脚本被静音了。
顺便说一句,您需要>在/dev/null 2>&1. 它应该是:
x * * * * /path/to/my/script > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
小智 9
从手册cron(8):
执行命令时,任何输出都会邮寄给 crontab [...] 的所有者。
所以你的文章在这里建议的是不产生输出,从而不发送邮件。禁用邮件的另一种方法(更方便?)是使用该-m off选项,即
crond -m off
Run Code Online (Sandbox Code Playgroud)
现在是语法:这是特定于 Bourne shell 语言(及其派生词,如bash、zsh等)。
[n]>file
[n]>fd
Run Code Online (Sandbox Code Playgroud)
将重定向到文件描述符n(或标准输出,如果未指定)到文件描述符fd。
文件描述符可以是流地址的文件名。&是 C 语言中的地址运算符。
通常,文件描述符1是标准输出(又名stdout),文件描述符2是标准错误(又名stderr)。大块
>/dev/null
Run Code Online (Sandbox Code Playgroud)
正在将标准输出重定向到 /dev/null。
'2>&1'
Run Code Online (Sandbox Code Playgroud)
正在将错误流重定向到已重定向到 /dev/null 的输出流。因此,不会产生任何输出,也不会发送邮件。
警告:重定向的顺序很重要:
>/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
不一样
2>&1 >/dev/null
Run Code Online (Sandbox Code Playgroud)
使用非特权用户尝试这两个命令:
ls >/dev/null 2>&1
ls 2>&1 >/dev/null
Run Code Online (Sandbox Code Playgroud)
事实上,在后一种情况下,文件描述符2被设置为文件描述符 ``1 的当前地址(此时是标准输出),然后文件描述符1被重定向到/dev/null. 文件描述符2仍然重定向到标准输出,无论发生什么事情到文件描述符1。