28: No space left on device

今天公司服務器突然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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章