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