crontab導致linux檔案描述符枯竭問題
問題處理過程
根據以上問題,分析步驟如下:
1、首先手動執行了一下定時任務,結果執行失敗,通過錯誤判斷是檔案描述符被用光了。具體報錯如下:
"cannot open shared object file: too many open files in system"
2、檢視定時任務是否堆積,ps -ef | grep 沒有發現任何任務在跑。猜測應該是其他問題導致,具體是什麼,不清楚。
3、通過系統命令top看到有多個sendmail程序,然後ps -ef | grep sendmail,發現大量程序。初步定位應該是sendmail的問題。首先將所有sendmail程序kill掉,然後定時任務可以執行了。一段時間後,重新檢視程序,發現又有了一些sendmail程序,進一步定位問題。
/usr/sbin/sendmail -fcrondaemon -i -odi -oem -oi -t -f root
4、通過pstree發現,sendmail程序是有crond守護程序啟動的。crontab怎麼會啟動sendmail程序?原來crond在執行指令碼時會將指令碼輸出資訊以郵件的形式傳送給crond使用者,但是sendmail程序堆積的原因是什麼呢?
init───2*[bash]
├─crond──102*[crond─┬─sendmail]
│ └─sh───sh]
5、檢視sendmail日誌,發現大量的warning告警資訊。經查原來是環境的postfix沒有正常執行,導致大量sendmail程序阻塞。
postfix/postdrop[23110]: warning: mail_queue_enter: create file maildrop/749274.23110: no such file or directory
6、根據博文[1]中的方法,將crontab的第一行新增:mailto=」」,然後檢視確實沒有了sendmail程序。
本以為解決了問題,但是過了幾天發現系統負載公升高,同樣的方式檢視,發現有了大量的postdrop程序,pstree發現發生了變化,原來postdrop程序是sendmail程序產生的,也就是說sendmail並沒有完全解決掉。
init───2*[bash]
|-crond---125*[crond---sendmail---postdrop]
│ │ └─sh───sh]
7、檢視sendmail日誌(/var/log/maillog),發現大量的warning告警資訊,錯誤顯示是許可權問題,那麼首先檢視maildrop目錄的許可權(/var/spool/postfix/maildrop/),修改許可權後,檢視沒有了該warning資訊。
告警資訊如下:
postfix/postdrop[21235]: warning: mail_queue_enter: create file maildrop/577217.21235: permission denied
執行命令如下:
chown postfix.postdrop /var/spool/postfix/public -r
chown postfix.postdrop /var/spool/postfix/maildrop -r
chmod 777 /var/spool/postfix/maildrop -r (僅修改以上兩步時,仍然有告警。)
8、基於穩妥考慮,將/etc/crontab的mailto設為"",這樣保證crontab不傳送日誌,也就不會產生sendmail程序了。
9、通過pstree檢查程序樹狀態,crond守護程序不會呼叫sendmail了,具體如下所示:
init───2*[bash]
├─crond
除此之外,在檢視sendmail日誌的時候,發現以下告警資訊較多,應該是系統設定上有些問題。經查是由於/etc/postfix/main.cf配置檔案中,inet_protocols = all的原因。修改配置為inet_protocols = ipv4後,warning資訊沒有了。
postfix/postdrop[17405]: warning: inet_protocols: ipv6 support is disabled: address family not supported by protocol
postfix/postdrop[17405]: warning: inet_protocols: configuring for ipv4 support only
10、sendmail 日誌檔案在: /var/log/maillog
文章**:
crontab導致磁碟空間滿問題的解決
收到磁碟空間滿的資訊。發現主機上 var空間不足。du sh 一層層的查下去看的時候,最終找到了 var spool clientmqueue這個目錄。裡面檔案有48w個,娘阿。這個問題的原因是crontab的一些計畫任務中產生了大量日誌資訊。這些日誌資訊沒有匯入到 dev null或者指定的檔案。...
Linux定時工具crontab
一.crontab工具 crontab u 設定某個使用者的cron服務 crontab e 編輯root使用者的cron服務,加上 u可編輯指定使用者的定時任務,例如 crontab u www e crontab l 列出root使用者cron服務的詳細內容,加上 u可檢視指定使用者的定時任務,...
Linux任務計畫crontab
crontab簡介 crontab 命令常見於 unix 和類 unix 的作業系統之中 linux 就屬於類 unix 作業系統 用於設定週期性被執行的指令。該命令從輸入裝置讀取指令,並將其存放於 crontab 檔案中,以供之後讀取和執行。通常,crontab 儲存的指令被守護程序啟用,cron...