这两天遇到了一个问题:1.问题是一台linux主机报存储空间过大告警,而里面的文件/var/spool/postfix/maildrop目录有400个10000个,占用30G内存,卡主执行ls、rm等命令,随机查看一两个文件,文件名是12的组合095285C63AF6等-位十六进制数,文件大小几K,文件内容无实质意义。2、问题原因:网上查了一下,具体情况如下。宿主机上有一些crontab,执行频率比较高。每次执行时,默认将输出和警告信息邮件发送给crontab的所有者。linux没有配置email功能,会导致发不出去,会以文件的形式堆积在/var/spool/postfix/maildrop目录下。三、问题解决3.1.临时解决办法:这些文件没有实际作用,必须手动删除。手动删除超过400万个小文件,rm-f删除不起作用,不知道执行效率如何,如果一直放在那里执行,不知道会不会因为客户端过期导致执行失败会议。而且,如果rm-f文件太多,会报错说传递的参数太大,导致无法删除。自动化脚本:通过ls-f1/var/spool/postfix/maildrop/*>~/tmp.txt将文件名列表写入一个临时文件,然后通过shell脚本读取文件列表,删除一个文件一、添加语句,还可以知道当前删除了哪个文件,脚本内容如下。#!/bin/bashcd/var/spool/postfix/maildrop/ls-f1/var/spool/postfix/maildrop/*>/root/tmp.txtforiin`cat/root/tmp.txt`doecho$irm-f$idoneecho“完成!”3.2彻底解决:禁用crontab邮件发送在每个用户的crontab下添加邮件配置语句,如下例:MAILTO=""*/5****/bin/bash*/2****/bin/sh4。最耗时的总结就是手动删除了400多个文件。毕竟积累了好几年。shell脚本不一定是最快最优的方式,比如能不能直接删除maildrop文件夹,删除后再创建maildrop文件夹。不确定是否可行,但这是最简单的方法,只要能解决当前的问题,就看问题的紧迫性、重要性和影响。
