今天发现服务器硬盘报警,出现空间不足的情况,后经查看发现是/var/spool/postfix/maildrop有大量文件,但服务器本身没有启动postfix服务。
继续上网查资料,发现是crontab每次执行任务后会发送邮件,接受者是在他的配置文件“/etc/crontab” 通过MAILTO=root来设置的,默认是root,如果执行输出没有十分必要要用邮件发送的话,可以修改此处。下面是两个解决
/var/spool/postfix/maildrop出现大量文件原因和解决办法
/var/spool/postfix/maildrop出现大量文件解决方法一
修改“/etc/crontab”将‘MAILTO=root’替换成‘MAILTO=""’修改之后没有成功,需要重启crond服务才可以。
也可从在crontab(crontab -e)中最前面直接加入中最前面直接加入MAILTO=""。
/var/spool/postfix/maildrop出现大量文件解决方法二
如果是我们不关心的备注型等输出我们完全可以让其输出到 /dev/null 这样就不会因为发送失败到导致在/var/spool/postfix/maildrop下面产出什么文件。例如:
*/10 * * * * /tmp/test.sh >/dev/null 2>&1
经过测试发现果然没有再出现新增的文件。当然如果输出内容有需要保存的话,可以输出到指定文件。比如这样:
*/10 * * * * /tmp/test.sh >/log/test.log
虽然都解决问题,但第一种改变了需要发送的机制,造成所有的都不能接收到邮件,且需要重启crond服务,对执行crontab比较多的,有一定影响;第二种感觉比较灵活,且改完立即生效。第一种方法比较彻底,免得以后再出现大量占用磁盘空间的情况出现。
重启crond服务:
1.在系统中有service这个命令时:
这个命令在red hat当中常用,有的linux发行版本中没有这个命令.
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务
2.linux发行版本没有service这个命令时:
/etc/init.d/cron stop /etc/init.d/cron start
3.执行出现 /bin/systemctl 。。。。说明是新版的可用以下命令操作
/bin/systemctl restart crond.service #启动服务 /bin/systemctl reload crond.service #重新载入配置 /bin/systemctl status crond.service #查看crontab服务状态
删除maildrop下所有文件:
[admin@iZ25tr5e048Z ~]$ sudo rm -rf /var/spool/postfix/maildrop/* [admin@iZ25tr5e048Z ~]$ -bash: /bin/rm: Argument list too long
当目录下文件太多时,用rm删除文件会报错:
-bash: /bin/rm: Argument list too long 提示文件数目太多。
解决的办法是使用如下命令:
ls | xargs -n 10 rm -fr ls
输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除
使用上面的方法成功了,下面是在网上找到的其他方法
1.先删除maildrop目录下的通知邮件文件
find /var/spool/postfix/maildrop/ -type f |xargs rm -rf
2.停止当前用户继续向maildrop目录中发送邮件
解决方案:
在cron的第一行加入 MAILTO=""便可,这样执行当前用户的Cron时,不会发送邮件。
Please add the MAILTO="" in the head of cron , please see the blow sample.
[root@mw1 postfix]# crontab -e MAILTO="" */5 * * * * /opt/OCMonitor/bin//ocSysMonitor -top -sar –netfmt
命令:crontab -e 解释:编辑当前用户的cron服务
官方QQ群号码:922069959(空)、1093596563(空)