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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值