我正在读一篇关于定时任务
有一些关于禁用自动发送电子邮件的操作。
禁用电子邮件 默认情况下,cron 作业会向执行 cronjob 的用户帐户发送电子邮件。如果不需要,请将以下命令放在 cron 作业行的末尾。
>/dev/null 2>&1
2
>
&
和的详细含义是什么1
?为什么将其放在 crontab 文件的末尾会关闭电子邮件发送功能?
答案1
>
用于重定向
/dev/null
是一个黑洞,发送的任何数据都将被丢弃
2
是标准错误的文件描述符
>
用于重定向
&
是文件描述符的符号(没有它,下面的1
将被视为文件名)
1
是标准输出的文件描述符
因此>/dev/null 2>&1
将程序的输出重定向到/dev/null
.包括Standard Error
和Standard Out
。
更多信息请访问 Linux 文档项目输入/输出重定向页。
cron
仅当您的工作有一些输出时才会向您发送电子邮件。由于所有内容都重定向到null
,因此没有输出,因此cron
不会向您发送电子邮件。
答案2
/dev/null
是一个充当黑洞的设备文件。无论写入什么内容,都会被丢弃或消失。当您运行一个为您提供输出的脚本时,如果我们> /dev/null 2>&1
在脚本末尾添加 a ,我们会要求脚本将从脚本生成的任何内容(输出和错误消息)写入/dev/null
.
打破它:
2
是标准错误的句柄或STDERR
1
是标准输出的句柄或STDOUT
2>&1
要求将所有STDERR
as定向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
答案3
这是标准 I/O 重定向。
始终打开三个默认文件。
- 标准输入 (0)
- 标准输出 (1)
- 标准错误 (2)
因此,在此示例中,stdout ( 1
) 被重定向到/dev/null
.
该null
设备是一个设备文件,它会丢弃写入其中的所有数据。
然后 stderr 被重定向到 stdout ( 2>&1
),因此,stdout 和 stderr 都将转到/dev/null
所以将其放在 crontab 作业的末尾将抑制命令的所有输出和错误。
参考
答案4
通常,当cron
执行 cronjob 时,它将 cronjob 中给出的命令的输出发送到执行 cronjob 的用户帐户。因此,当您的 cronjob 执行时,uptime
例如,输出uptime
会通过电子邮件发送给用户。
需要明确的是,该命令的标准输出 ( stdout
) 的含义。现在,如果您uptime
在 cornjob 中执行以下命令:
uptime >/dev/null 2>&1
2>&1
表示将通道 2 (stderr
) 重定向到通道 1 (stdout
)。两个输出现在位于同一通道 (1
)。>/dev/null
: 表示标准输出(和标准错误输出)被发送到/dev/null
。/dev/null
是一个特殊文件:
写入空或零特殊文件的数据将被丢弃。
因此,您丢弃输出,并且 cron 没有任何可发送的内容。