/var/spool/clientmqueue 爆滿問題
當你使用簡單的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