今天公司服務器突然ssh鏈接不上,服務器上的服務和nginx也down掉了,無奈之下只能重啓服務器。
重啓後在啓動nginx時報錯:
nginx: [crit] pwrite() "/usr/local/nginx/logs/nginx.pid" failed (28: No space left on device)
本以爲是磁盤滿了,但是通過df -h查看磁盤使用情況,磁盤使用率非常低:
[root@~]# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 4.0G 0 4.0G 0% /dev/shm
inode的使用率也非常低:
[root@ ~]# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 1001K 1 1001K 1% /dev/shm
一籌莫展的時候,試了一下通過du -sh *來查看各個目錄的大小,發現/var/spool/postfix/maildrop目錄有10G大小,而且裏面有大量2K左右的小文件。
百度了一番,終於搞清楚,原來該目錄存放的是系統郵件發送日誌,由定時任務crond產生。crontab每次執行任務後都會發送郵件,在/etc/crontab文件中會有MAILTO=root來配置郵件接收者。由於服務器並沒有做root郵件相關的配置,所以每次執行完定時任務發送郵件都會失敗,並記錄失敗日誌到/var/spool/postfix/maildrop中,導致目錄過大。
解決方法:
1.先刪除/var/spool/postfix/maildrop中的所有文件:
[root@~]# cd /var/spool/postfix/maildrop
#刪除該目錄下的所有文件,使用rm -rf * 時,會報-bash: /bin/rm: Argument list too long
#因爲該目錄下的文件數太大,所以需要使用下面的指令進行刪除
[root@ maildrop]#ls | xargs -n 10 rm -fr ls
#輸出所有的文件名(用空格分割) xargs就是將ls的輸出,每10個爲一組(以空格爲分隔符),作爲rm -rf的參數也就是說將所有文件名10個爲一組,由rm -rf刪除
2.刪除完maildrop的文件後,修改定時任務配置文件
#crontab -e 編輯定時任務
[root@ maildrop]# crontab -e
#在第一行添加MAILTO="",這樣定時任務執行完後就不會再發送郵件,也就不會產生髮送日誌
MAILTO=""
0 */1 * * * /usr/local/bns/freemem.sh
****
****
#保存後,重啓crond服務
[root@ maildrop]# /sbin/service crond restart