Postfix 隊列清理mysql
今天有同事反映發郵件速度慢,登陸了郵件服務器的後臺看一下(咱們的郵件服務器是postfix+dovecot+mysql+extmail+extmansql
搭建的基於mysql的虛擬用戶),如圖bash
郵件隊列已經達到了80000封,而後我看了一下負載,已經達到20多了…….服務器
你們都清楚負載一旦達到這個數值,服務器的性能確定已經至關差了。這裏就有問題了,隊列這麼多如何清理呢?ide
若是是把隊列所有清除的話很簡單:postsuper –d ALL 就ok了。可是這樣操做會產生不少問題,有的正常的尚未發送的隊列也會被清掉;post
假如一個一個的清理,那太要命了,怎麼辦呢?我用postqueue –p查看了一下,發現隊列裏的日期的兩個特色,一是日期排列不規律,性能
第二個特色是日期只有最近5天的。Ok,有辦法了。blog
這是我寫的一個腳本:隊列
#!/bin/baship
/usr/sbin/postqueue -p|egrep '(Nov 8|Nov 9)' > queue1.txt
/usr/sbin/postqueue -p|egrep '(Nov 8|Nov 9)'|awk '{print $1}' > queue2.txt
for i in `cat /root/queue2.txt`
do
/usr/sbin/postsuper -d $i
done
這個腳本的做用是把隊列當中日期爲8號和9號的的隊列寫到一個文件queue1.txt(包含日期等信息),queue2.txt(只包含隊列號);
而後用一個for循環來把queue2.txt裏面的全部的隊列都清除掉。執行完腳本,過幾分鐘再看監控圖:
Ok,隊列少了不少,並且服務器的負載也已經小於5了。
但願這個腳本對廣大管理員有用,也但願你們有好的意見多提一下,歡迎你們跟我留言交流。