转自:http://hi.baidu.com/lichangza…
当你使用简单的 sendmail 发邮件的时候,或者系统默认要发一些邮件(比如 cron 发的邮件)的时候,首先会把邮件拷贝到这个目录里,然后等待 MTA(mail transfer agent) 来处理,MTA 做的事情通常是把这个目录中的邮件弄到 /var/spool/mqueue 里,然后再发送到真正的目的地。出现 /var/spool/clientmqueue/ 非常大的情况通常因为没有合适的 MTA 发送邮件,就都积累在这里了,假如这里的邮件并不是你需要的,比如是系统默认发的每分钟跑一次的什么什么 cron 的信,你可以简单的删掉他们。当然,文件多了一些,直接 rm -f *,系统可能会说 argument too long 什么的,没有关系,find /var/spool/clientmqueue/ -type f –delete 或者 find /var/spool/clientmqueue/ -type f -exec rm {} \+ 可能对你有帮助,当然这两条命令要求 find 的版本比较新。如果不幸你的版本比较低,可以尝试 find /var/spool/clientmqueue/ -type f -exec rm {} \;
原因分析: 系统中有用户开启了 cron,而 cron 中执行的程序有输出内容,输出内容会以邮件形式发给 cron 的用户,而 sendmail 没有启动所以就产生了这些文件;
解决办法: 1、将 crontab 里面的命令后面加上 > /dev/null 2>&1
2、知识点:
2>:重定向错误。
2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到 /dev/null,即抛弃,同时,把产生的错误也抛弃。
使用 du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录
注:/ 是系统目录,可以 cd 到当前目录下执行 du -sh *
3、具体代码:
(1)、# crontab -u cvsroot -l
01 01 * * * /opt/bak/backup
01 02 * * * /opt/bak/backup2
(2)、# vi /opt/bak/backup
!/bin/sh
cd /
getfacl -R repository > /opt/bak/backup.acl
(3)、# vi /opt/bak/backup2
!/bin/sh
week=`date +%w`
tar zcvfp /opt/bak/cvs$week/cvs.tar.gz /repository >/dev/null 2>&1
4、清除 /var/spool/clientmqueue/ 目录下的文件:
# cd /var/spool/clientmqueue
# rm -rf *
如果文件太多,占用空间太大,用上面命令删除慢的话,就执行下面的命令:
# cd /var/spool/clientmqueue
# ls | xargs rm -f