天天看點

由于crondtab定時任務導緻大量sendmail程序的解決辦法

早上六點多鐘有一台伺服器告警說當機了,嘗試登陸發現登陸伺服器沒問題,ps -ef | grep mysql的時候發現mysqld服務也還在,mysql錯誤日志也沒有任務報錯。但是檢視vim /var/log/messages時發現是硬碟有問題,嘗試touch一個檔案的時候提示‘read-only file system’,于是聯系機房檢測故障。

但是當執行top的時候發現目前使用者下面有很多sendmail的程序,如下圖所示,發件人是crondaemon,懷疑是和定時任務有關,檢視目前使用者的定時任務發現有一個每分鐘運作一次的定時任務,但是定時腳本是沒有調用sendmail了,ps -ef | grep sendmail | wc -l 統計發現sendmail的程序資料基本上就是從伺服器出故障到目前時間的分鐘數。

<a href="http://s1.51cto.com/wyfs02/M01/8A/E7/wKiom1g-kpHwupKwAAC83P5yQLw090.png-wh_500x0-wm_3-wmp_4-s_1428747374.png" target="_blank"></a>

然道是crontab每次執行都會調用sendmail發郵件嗎?man 5 crontab檢視幫助手冊的時候發現這個一段話:

In  addition  to  LOGNAME,  HOME,  and SHELL, cron(8) will look at MAILTO if it has any reason to send mail as a result of running commands in "this" crontab.  If MAILTO is defined (and non-empty), mail is sent to the user so named.  If MAILTO is defined but empty (MAILTO=""), no mail will be sent.  Otherwise mail is sent to the owner of the crontab.  This option is useful if you decide on /bin/mail instead of /usr/lib/sendmail as your mailer when you install  cron  -- /bin/mail doesnt do aliasing, and UUCP usually doesnt read its mail. If MAILFROM is defined (and non-empty), it will be used as the envelope sender address, otherwise, ‘‘root’’ will be used.

檢視crontab的配置檔案:

cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

可以看到MAILTO這一行不為空,如果不想讓它發郵件的話可以按照手冊上面說的把MAILTO這一行删掉或者改為MAILTO=""

本文轉自 emma_cql 51CTO部落格,原文連結:http://blog.51cto.com/chenql/1878182