这三天遇见一个问题:
1、问题现象
一个linux主机上报储存过大的告警,/var/spool/postfix/maildrop目录下的文件多大400万个,占用储存30G,ls、rm等命令执行就卡主,抽检一两个文件,文件名是类似095285095285CC6363AFAF6这样的12位16补码的数字次序组合,文件大小都是几Klinux安全加固,文件内容没有实质性的意义。
2、问题缘由:网上查了下,具体如下
该主机上有一些crontab,执行频度比较高,每次执行就会默认将output和warning信息短信发送给crontab的属主,linux没有配置短信功能,会造成有你发送不出去,因而以文件的方式堆积在/var/spool/postfix/maildrop目录下。
3、问题解决方案
3.1、临时方案:那些文件没有实际作用,自动删掉。
自动删掉400多万个小文件,rm-f删掉执行不动,不晓得执行效率,假如仍然放到哪里执行,也不确定会不会因顾客端会话过期造成执行失败。并且rm-f假如文件过多linux删除目录下的文件,也会报错说传递的参数过大,致使未能删掉。
手动化脚本:通过ls-f1/var/spool/postfix/maildrop/*>~/tmp.txt,将文件名清单写入到临时文件中,之后通过shell脚本linux删除目录下的文件,读取文件清单,一个个文件删掉,加上句子,也可以晓得当前删掉的是那个文件,脚本内容如下。
#!/bin/bash
cd /var/spool/postfix/maildrop/
ls -f1 /var/spool/postfix/maildrop/* > /root/tmp.txt
for i in `cat /root/tmp.txt`
do
echo $i
rm -f $i
done
echo "complete!"
3.2、彻底解决方案:禁用crontab的短信发送
在每位用户的crontab下降低电邮配置的词句,如下示例:
MAILTO=""
*/5 * * * * /bin/bash
*/2 * * * * /bin/sh
4、总结
历时最长的是自动删掉400多个文件,虽然积累了好几年的东西,shell脚本不一定是最快、最优的方法linux操作系统,例如是否可以直接删掉maildrop文件夹,删掉完后再创建一个maildrop文件夹,不确定是否可行,而且是做法上最简单的一种,能解决当前问题就行,看问题紧急、重要程度和影响。