crontab定时任务输出产生大量邮件耗尽文件系统inode问题处理

  • Post author:
  • Post category:其他


在某台Linux系统中运行命令,按tab键补充输出时,提示“无法为立即文档创建临时文件:设备上没有空间”信息,如下所示:

在这里插入图片描述

检查文件系统的空间使用情况,输出正常:

在这里插入图片描述

检查文件系统的inode数量使用情况,根分区的inode已经全部耗尽:

在这里插入图片描述

使用命令“ls -lR /var |grep “^-”|wc -l”查看根目录下各个目录的文件数量,发现/var目录有大量的文件。

进一步检查,确认/var/spool/postfix/maildrop目录下有大量的小文件。

“mailq”命令显示有大量的root用户待发送邮件队列,“mail”输出中也有大量的信息。

进入/var/spool/postfix/maildrop目录,删除目录下所有文件。

# find ./ -type f | xargs rm -f



# find ./ -type f -exec rm -f {} ;

根目录的inode使用情况恢复正常,如下:

在这里插入图片描述

同时,也对root用户收到的所有邮件进行了清空:

# echo > /var/spool/mail/root

检查系统中的crontab定时任务列表,其中含有每分钟执行一次的脚本,但脚本后面没有加上“ > /dev/null 2>&1”或者“ > 日志路径和名称 2>&1”来丢弃或保留脚本的输出到日志文件。

系统在默认情况下,会将crontab定时任务执行的脚本的输出通过邮件发送给cron用户。但是由于用户接收的邮件数量或邮件占用的总空间大小有最大限制,因此发送不成功的邮件就不断在/var/spool/postfix/maildrop目录下堆积,最终导致文件系统中文件数量过多而耗尽文件系统的inode。

标准的定时任务配置建议在脚本后面加上前面所述的内容。

另外,也可以使用crontab -e更改用户的定时任务,在脚本的前面行中加上行MAILTO=“”,让cron进程不将脚本输出的内容通过邮件来发送(如果使用/etc/crontab文件来配置MAILTO参数的话,定时任务脚本应该也得放在该文件中才能生效),示例如下:

# crontab -l

MAILTO=“”

* * * * * script1.sh



版权声明:本文为jetliu05原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。