工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。(如需有關工作控制器概念和通道關鍵字配置的資訊,請參閱8.7 工作控制器、12.5.4 通道執行工作的處理區以及12.5.5 服務工作限制。)
工作控制器檔案 job_controller.cnf 用於指定以下通道處理資訊︰
定義各種處理區
為所有通道指定主要程式名稱和從屬程式名稱 (如果適用)
在imta.cnf file 中,您可以使用 pool 關鍵字指定處理區 (定義於 job_controller.cnf 中) 的名稱。例如,以下 job_controller.cnf 範例檔案的片段定義了處理區 MY_POOL:
[POOL=MY_POOL] job_limit = 12
以下 imta.cnf 範例檔案的片段指定了通道區塊中的處理區 MY_POOL:
channel_x pool MY_POOL channel_x-daemon
如果要修改與預設處理區配置相關聯的參數或增加其他處理區,則可以透過編輯 job_controller.cnf 檔案,然後停止並重新啟動工作控制器來完成。
工作控制器配置檔案中的第一個處理區用於不指定處理區名稱的所有請求。MTA 配置檔案 (imta.cnf) 中定義的 MTA 通道,可以透過使用後跟處理區名稱的 pool 通道關鍵字,將它們的處理請求導向特定處理區。該處理區的名稱必須比對工作控制器配置中的處理區名稱。如果工作控制器無法識別請求的處理區名稱,則該請求會被忽略。
在初始配置中定義了以下處理區:DEFAULT、LOCAL_POOL、IMS_POOL 和 SMTP_POOL。
通常,如果您要將某些通道的處理與其他通道的處理區分開,可以將附加的處理區定義新增至工作控制器配置。您還可以選擇使用具有不同特性的處理區。例如,您可能需要控制某些通道可以處理的同步請求數目。可以透過建立具有工作限制的新處理區來完成此作業,然後使用 pool 通道關鍵字將這些通道導入更合適的新處理區。
除了處理區定義以外,工作控制器配置檔案還包含 MTA 通道表以及工作控制器用於為每個通道處理請求所必需的指令。兩種類型的請求分別稱為「主」和「從屬」。通常,當通道的 MTA 郵件佇列中儲存有郵件時,會呼叫通道主程式。主程式會將郵件移出佇列。
呼叫從屬程式以輪詢通道並挑選該通道上任何內送郵件。由於幾乎所有 MTA 通道均具有主程式,因此大多數通道不具有或不需要從屬程式。例如,經由 TCP/IP 處理 SMTP 的通道就不使用從屬程式,因為網路服務 (SMTP 伺服器) 將根據任何 SMTP 伺服器的請求接收內送 SMTP 郵件。SMTP 通道的主程式是 MTA 的 SMTP 用戶端。
如果與通道關聯的目標系統一次無法處理多封郵件,您需要建立一個工作限制為一的新型處理區:
[POOL=single_job] job_limit=1
另一方面如果目標系統具有足夠的平行處理能力,您可以將工作限制設定為較高的值。
範例 10–1 顯示工作控制器配置檔案範例。表 10–6 顯示可用選項。
!MTA Job Controller configuration file ! !Global defaults tcp_port=27442 (1) secret=never mind slave_command=NULL (2) max_life_age=3600 (3) ! ! !Pool definitions ! [POOL=DEFAULT] (4) job_limit=10 (5) ! [POOL=LOCAL_POOL] job_limit=10 ! [POOL=IMS_POOL] job_limit=1 ! [POOL=SMTP_POOL] job_limit=1 ! !Channel definitions ! ! [CHANNEL=l] (6) master_command=msg-svr-base/lib/l_master ! [CHANNEL=ims-ms] master_command=msg-svr-base/lib/ims_master ! [CHANNEL=tcp_*] (7) master_command=msg-svr-base/lib/tcp_smtp_client |
上述範例中的主要項目 (編號位於括號中並以粗體表示) 為:
此全域選項定義了工作控制器在其上偵聽請求的 TCP 連接埠號。
為後續 [CHANNEL] 區段設定預設的 MAX_LIFE_AGE。
此 [POOL] 區段定義名為 DEFAULT 的處理區。
此 [CHANNEL] 區段適用於名為 l 的通道和 UNIX 本機通道。此區段中需要的唯一定義為 master_command,工作控制器會發出該指令以執行此通道。由於通道名稱中沒有萬用字元,所以通道必須完全相符。
此 [CHANNEL] 區段適用於名稱以 tcp_* 開頭的任何通道。由於該通道名稱中包含萬用字元,它將比對名稱以 tcp_ 開頭的任何通道。
工作控制器用於建立和管理遞送郵件的通道工作。這些通道工作在工作控制器內的處理區中執行。可以認為處理區是通道工作執行的「地方」。處理區提供一個運算區域,可供一組工作在其中作業,而無需與處理區外部的工作競爭資源。請注意,job_controller 中設定的工作限制是針對每個處理區。因此,例如,如果您將 SMTP_POOL 的 job_limit 定義為 10,則在任一指定時間內,僅能有 10 個 tcp_smtp 用戶端程序在該處理區中執行。
在某些情況下,可能需要建立額外的 tcp_* 通道 (例如,用於特別緩慢的郵件站點的 tcp 通道)。最好是讓這些通道在不同的處理區中執行。原因為,如果建立了十個不同的 tcp_* 通道且均在 SMTP_POOL 中執行,則在任一指定時間內,每個 tcp_* 通道上可能僅有一個 tcp_smtp 用戶端在執行 (取決於是否存在有目標為所有 tcp_* 通道的郵件,並且是否指定 SMTP_POOL 的 job_limit 定義為 10)。如果系統負載很重,並且所有佇列中均有郵件等待透過各個 tcp_* 通道傳送出去,則效率會很低。您很可能會為其他 tcp_* 通道定義額外的處理區,以防止出現競爭槽的情況。
例如,假定我們設定了以下 tcp_* 通道:
tcp_yahoo smtp mx pool yahoo_pool keyword keyword keyword tcp-yahoo-daemon tcp_aol smtp mx keyword keyword keyword pool aol_pool tcp-aol-daemon tcp_hotmail smtp mx pool hotmail_pool keyword keyword keyword tcp-hotmail-daemon ... tcp_sun smtp mx pool sun_pool keyword keyword keyword tcp-sun-daemon |
為使每個新通道有十個 tcp_smtp_client 程序,我們將在 job_controller.cnf 檔案中增加以下內容:
[POOL=yahoo_pool] job_limit=10 [POOL=aol_pool] job_limit=10 [POOL=hotmail_pool] job_limit=10 ... [POOL=sun_pool] job_limit=10 |
如需有關處理區的更多資訊,請參閱12.5.4 通道執行工作的處理區。
表 10–6 工作主控台配置檔案選項