每次 cron 运行时,都会创建一些 sendmail 进程,这些进程使我们的机器承受巨大的高负载。我们已经将这个问题追溯到 cron 和 sendmail。
在 cron 之上添加 MAILTO="" 是一种解决方案,将每个 cron 命令管道到 dev null 是另一种解决方案,但我需要一个全局解决方案......在 cron 左右进行某种配置。
Vixiecron没有以下选项,我相信它可以解决我的问题
-m This option allows you to specify a shell command to use for sending Cron mail output instead of
using sendmail(8) This command must accept a fully formatted mail message (with headers) on stan?
dard input and send it as a mail message to the recipients specified in the mail headers. Specify?
ing the string off (i.e., crond -m off) will disable the sending of mail.
Run Code Online (Sandbox Code Playgroud)
那么如何在全局范围内完全禁用 cron 电子邮件呢?
当必须是 vixie-cron 时,在 cron 顶部添加 MAILTO="" 就是解决方案。没有全局方法(所有选项都存储在各自用户的 crontab 中)。这
然后cron每分钟醒来,检查所有存储的 crontab,检查每个命令以查看它是否应该在当前分钟运行。 执行命令时,任何输出都会邮寄给 crontab 的所有者(或者发送给 crontab 中 MAILTO 环境变量中指定的用户,如果存在的话)。运行这些进程的 cron 子副本的名称强制为大写,如 syslog 和 ps 输出中所示。
没有额外的配置,因此始终执行(也可以通过在命令本身中添加>/dev/null 2>&1
或 来终止邮件的发送&>/dev/null
;但这比编辑所有 crontab 需要更多工作)。
该链接还指出:
每个用户都可以有自己的 crontab,虽然这些文件位于 中
/var/spool/cron/crontabs
,但不能直接编辑它们。
我看到 3 个可能的选择:
我的首选方法是使用crontab -e
.
使用另一个具有全局设置 MAILTO 方法的 cron(哪个 cron 以及如何执行此操作是另一个问题;))
忽略警告并使用 for/next 循环从命令行编辑所有文件。我把这句话理解为“如果你真的真的真的真的真的想要的话,你就可以。”。请注意这两个主题中关于此的评论:ubuntuforums和serverfault。据我所知,您面临的唯一问题(如果做得正确!)是,如果有人确实使用crontab -e
. 但是,如果你们都同意,如果有人确实更改了 crontab,crontab -e
他们还必须包含 MAILTO='' 则应该注意这一点(因为您所做的更改会被新的 crontab 覆盖,但该更改也包含您的更改) )。