解决clientmqueue中产生巨量文件导致DNS服务器不可达

2017-04-29  本文已影响354人  康悦

发生

周五上午一早,多台服务器产生 DNS-1服务不可达告警。登陆到服务器上ping DNS服务器地址正常,使用nslookup指定故障DNS服务器查询域名也是正常。尝试重启DNS-1服务器后,故障短暂恢复,过了30分钟又出现告警。同时多台服务器又同时产生 DNS-3、DNS-4服务不可达告警。

处理

查看DNS服务器上的CPU、内存占用均无问题,但查询硬盘使用情况发现,4台服务器中的三台根分区占用率已经达到100%

[root@DNSsrv1 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G   20G    0M 100% /
/dev/sda4             109G  320M  103G   1% /home
/dev/sda1             996M   67M  878M   8% /boot
tmpfs                  12G     0   12G   0% /dev/shm

于是先将占用空间较大的log文件备份出来,腾出一些空间,以恢复服务的正常运行。同时使用 du -h --max-depth=1 /* 排查占用空间较大的文件位置。经检查发现, /var/spool/clientmqueue/ 目录占用了巨量的磁盘空间,在该目录下 ls 会造成终端卡死。

/var/spool/clientmqueue/ 目录为存放linux系统内mail的缓存文件夹。当有系统事件或cron定时任务具有输出时,系统会调用sendmail服务为用户发送信件。如果系统中有sendmail服务运行的话,信件将会存放到/var/spool/mail/中对应的用户名文件内。若sendmail服务并没有运行,信件则会存放到 /var/spool/clientmqueue/ 内。

使用crontab -l检查定时任务脚本,并未发现有输出的脚本。对所有定时任务脚本加入了>/dev/null 2>&1重定向所有输出到/dev/null防止定时任务产生信件。

由于 /var/spool/clientmqueue/ 中的文件太多,无法使用 rm -f *直接删除,需要使用 ls | xargs rm -f 进行删除。耗时三个小时将 /var/spool/clientmqueue/ 中的文件清空,清理了15G的文件。

[root@DNSsrv1 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  3.9G   15G  22% /
/dev/sda4             109G  320M  103G   1% /home
/dev/sda1             996M   67M  878M   8% /boot
tmpfs                  12G     0   12G   0% /dev/shm

观察该文件夹,仍然在每五分钟产生15个新的文件


查看其中信件内容为

From root@DNSsrv1  Sat Apr 29 11:15:43 2017
Return-Path: <root@DNSsrv1>
Received: from DNSsrv1 (dnsserver [127.0.0.1])
        by DNSsrv1 (8.13.8/8.13.8) with ESMTP id v3T3CGvN014948
        for <root@DNSsrv1>; Sat, 29 Apr 2017 11:15:42 +0800
Received: (from root@localhost)
        by DNSsrv1 (8.13.8/8.13.8/Submit) id v3SKjM7U019884;
        Sat, 29 Apr 2017 04:45:22 +0800
Date: Sat, 29 Apr 2017 04:45:22 +0800
Message-Id: <201704282045.v3SKjM7U019884@DNSsrv1>
To: root@DNSsrv1
From: ituser@DNSsrv1
Auto-Submitted: auto-generated
Subject: *** SECURITY information for DNSsrv1 ***

DNSsrv1 : Apr 29 04:45:22 : ituser : /etc/sudoers is mode 0755, should be 0440 ; TTY=pts/0 ; PWD=/home/ituser ; USER=root ; COMMAND=/usr/sbin/ethtool eth6

原来是由于 /etc/sudoers 文件权限不是0440而导致每次sudoer用户ituser执行sudo命令的时候,sudo通知root用户该文件权限不对。

使用 chmod 0440 /etc/sudoers 修改文件权限后,再没有新的文件产生了。

总结

  1. 例行查看服务器状态时多留意磁盘空间的变化
  2. 使用cron执行定时任务脚本时,要注意脚本的输出,若不想收到Linux系统信件,记得将输出重定向到/dev/null
  3. 为防止类似事情发生,可设置定时任务定时清除/var/spool/clientmqueue/中的文件
上一篇下一篇

猜你喜欢

热点阅读