管理 sendmail 的郵件隊列
郵件隊列是存儲 sendmail 命令傳送的郵件消息數據和控制文件的目錄。缺省情況下,郵件隊列是 /var/spool/mqueue。
郵件消息可能由于很多原因而排入隊列。
例如:
- sendmail 命令可以配置成按一定的時間間隔處理隊列,而不是立即處理。如果這樣,郵件消息必須臨時存儲。
- 如果一個遠程主機不響應一個郵件連接的請求,郵件系統會將這些消息排入隊列,稍后再作嘗試。
打印郵件隊列
隊列內容可以使用 mailq 命令打印(或通過指定 sendmail 命令的 -bp 標志)。
這些命令產生隊列標識、消息大小、消息進入隊列的日期以及發送方與收件人的列表。
郵件隊列文件
隊列中的每條消息都與一定數量的文件相關聯。這些文件按以下約定命名:
TypefID
其中 ID 是一個唯一的消息隊列標識,而 Type 是以下表示文件類型的字母中的一個:
d | 包含消息正文但無標題信息的數據文件。 |
q | 隊列控制文件。該文件包含處理作業所需要的信息。 |
t | 臨時文件。該文件是 q 文件重建時的一個映象。它快速重命名為 q 文件。 |
x | 在會話過程中存在并顯示該次會話中發生的任何事件的記錄文件。 |
例如,如果一條消息的隊列標識為 AA00269,當 sendmail 命令嘗試傳送消息時,在郵件隊列目錄中創建和刪除以下文件:
dfAA00269 | 數據文件 |
qfAA00269 | 控制文件 |
tfAA00269 | 臨時文件 |
xfAA00269 | 記錄文件 |
q 控制文件
q 控制文件包括一系列行,每一行都以一個代碼字母開始:
傳送到 amy@zeus 的消息的 q 文件類似于:
P217031 T566755281 MDeferred: Connection timed out during user open with zeus Ramy@zeus H?P?return-path: <geo> Hreceived: by george (0.13 (NL support)/0.01) id AA00269; Thu, 17 Dec 87 10:01:21 CST H?D?date: Thu, 17 Dec 87 10:01:21 CST H?F?From: geo Hmessage-id: <8712171601.AA00269@george> HTo: amy@zeus Hsubject: test
其中:
P217031 | 消息的優先級 |
T566755281 | 提交時間(秒) |
MDeferred: Connection timed out during user open with zeus | 狀態消息 |
Sgeo | 發送方標識 |
Ramy@zeus | 收件人標識 |
Hlines | 消息的報頭信息 |
在 sendmail 中指定時間值
要設置消息超時和隊列處理間隔,必須用特定的時間值格式。時間值的格式是:
-qNumberUnit
其中 Number 是一個整數值,Unit 是單位字母。Unit 可以是以下值中的一個:
s | 秒 |
m | 分 |
h | 小時 |
d | 天 |
w | 周 |
如果沒有指定 Unit,sendmail 守護程序使用分(m)作為缺省值。下面三個示例說明時間值的規范:
/usr/sbin/sendmail -q15d
該命令使得 sendmail 守護程序每 15 天處理一次隊列。
/usr/sbin/sendmail -q15h
該命令使得 sendmail 守護程序每 15 小時處理一次隊列。
/usr/sbin/sendmail -q15
該命令使得 sendmail 守護程序每 15 分鐘處理一次隊列。
強制郵件隊列
在某些情況下,您可能發現隊列由于某種原因阻塞。您可以使用 -q 標志(沒有值)強制一個隊列運行。您也可以用 -v 標志(詳細)來觀察發生了什么:
/usr/sbin/sendmail -q -v
使用一個隊列修飾符,您也可以將作業限制在具有特定隊列標識符、發送方或收件人的范圍中。例如,-qRsally 將隊列運行限制為收件人地址之一中有字符串 sally 的作業。同樣,-qS 字符串會將運行限制為特定的發送方,而 -qI 字符串將它限制為特定的隊列標識。
設置隊列處理時間間隔
守護程序啟動時 -q 標志的值確定 sendmail 守護程序處理郵件隊列的時間間隔。
sendmail 守護程序通常由 /etc/rc.tcpip 文件在系統啟動時啟動。/etc/rc.tcpip 文件包含一個稱為隊列處理間隔(QPI)的變量,該變量在該文件啟動 sendmail 守護程序時用來指定 -q 標志的值。缺省情況下,qpi 的值是 30 分鐘。要指定不同的隊列處理間隔:
- 用您喜歡的編輯器編輯 /etc/rc.tcpip 文件。
- 查找給 qpi 變量指定值的行,例如:
qpi=30m
- 將指定給變量 qpi 的值更改為希望的時間值。
這些變化會在下一次系統重新啟動時生效。如果您想讓這些變化立刻生效,請停止并重新啟動 sendmail 守護程序,指定新的 -q 標志值。更多相關信息,請參閱停止 sendmail 守護程序和啟動 sendmail 守護程序。
移動郵件隊列
當一個主機長期關閉時,路由到(或通過)該主機的很多消息可能存儲在郵件隊列中。結果 sendmail 命令要花費很長時間對隊列排序,這嚴重降低了系統性能。如果您移動隊列到一個臨時空間并創建一個新的隊列,舊隊列可以稍后在該主機恢復服務后運行。要移動隊列到一個臨時空間并創建一個新的隊列,請:
- 按停止 sendmail 守護程序中的指示信息停止 sendmail 守護程序。
- 輸入以下內容移動整個隊列目錄:
cd /var/spool mv mqueue omqueue
- 按啟動 sendmail 守護程序中的指示信息重新啟動 sendmail 守護程序。
- 輸入以下內容處理舊郵件隊列:
/usr/sbin/sendmail -oQ/var/spool/omqueue -q
-oQ 標志指定一個備用隊列目錄。 -q 標志指定運行隊列中的每一項作業。要獲取操作過程的報告,請使用 -v 標志。
注:此操作可能要花些時間。 - 當隊列為空時,輸入以下內容除去日志文件和臨時目錄:
rm /var/spool/omqueue/* rmdir /var/spool/omqueue
啟動 sendmail 守護程序
要啟動 sendmail 守護程序,請輸入以下命令中的一個:
startsrc -s sendmail -a "-bd -q15"
/usr/lib/sendmail -bd -q15
如果 sendmail 守護程序在輸入這些命令中的一個時已經激活,請參閱屏幕上的以下消息:
sendmail 子系統已經激活。不支持多實例。
如果 sendmail 守護程序沒有被激活,您將會看到一條消息表示 0sendmail 守護程序已經啟動。
停止 sendmail 守護程序
要停止 sendmail 守護程序,請運行 stopsrc -s sendmail 命令。
如果 sendmail 守護程序沒有隨 startsrc 命令啟動,請:
- 查找 sendmail 進程標識。
- 輸入 kill sendmail_pid 命令。(其中 sendmail_pid 是 sendmail 過程的處理標識)。
posted on 2008-12-22 18:46 強強 閱讀(2223) 評論(0) 編輯 收藏 所屬分類: sendmail