利用linux的“黑洞”解决crontab定时任务给系统带来的困扰

linux发送定时任务是惯用的操作,但是带来的问问也是不可忽略的。我最近在自己的服务器开了几个定时任务,每分钟请求一次。定时任务是很顺利的,但是这两天打开linux终端的时候总是提示有新邮件(You have new mail in /var/spool/mail/root),进入该目录下面查看发现都是定时任务(crontab)请求后的反馈或者错误。用df -h 命令发现系统总用了11.9G,于是我执行mail d * 删除所有mail邮件,发现变成9.8G。所有邮件占用很多系统空间。这个问题就是这两三天我开启的6个每分钟一次的定时任务引发的,突然想起之前公司某个服务器开了很多定时任务然后磁盘总是满的原因了。

但是总不能经常登录进行手动清理吧,编写脚本也需要脚本一直启动执行,有什么办法呢?

第一种:“黑洞”可以解开这个问题,利用linux的黑洞(/dev/null)吸收相关无用的东西即可。

解决方案:

在定时任务的后面加上 >/dev/null 2>&1 就可以把所有输出放到黑洞里面了。

例如:*/1 * * * * /usr/bin/curl http://abc.com/api/xxxxx/ >/dev/null 2>&1  #这样就可以把输出(正确的和错误的)都丢进黑洞了。

给定时任务加上这个后就不需要手动清理mail的空间了。

发现邮件没有增加了,空间不被占用了:
    [root@wbs mail]# ls -l root
    -rw------- 1 root root 288474 Dec 20 09:37 root
    [root@wbs mail]# ls -l root
    -rw------- 1 root root 288474 Dec 20 09:37 root
    [root@wbs mail]# ls -l root
    -rw------- 1 root root 288474 Dec 20 09:37 root
    [root@wbs mail]# ls -l root
    -rw------- 1 root root 288474 Dec 20 09:37 root

另一种方法是彻底关闭mail的接收,就是给定时任务的文件加上收件人为空的命令即可(MAILTO="").

   [root@wbs mail]# crontab -l
        MAILTO = ""
        */1 * * * * /usr/bin/curl http://abc.com/api/xxxx

这两种方式都非常实用,后者就更加方便点,不用每个任务后面都加上重定向结果到黑洞的代码。

评论/留言