增加 Postfix/Cyrus「超出指令時間限制」的逾時?

增加 Postfix/Cyrus「超出指令時間限制」的逾時?

我有一個運行 Postfix 2.1.5 的舊 OS X Server 10.4.x,它配置為使用 cyrus 作為郵箱傳輸。

這是 postconf -n:

# postconf -n
alias_maps = hash:/etc/aliases,hash:/var/mailman/data/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
enable_server_options = yes
html_directory = no
inet_interfaces = all
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
luser_relay = 
mail_owner = postfix
mailbox_size_limit = 0
mailbox_transport = cyrus
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
maps_rbl_domains = 
message_size_limit = 15728640
mydestination = $myhostname,localhost.$mydomain,livingnow.com.au,localhost
mydomain = livingnow.com.au
mydomain_fallback = localhost
myhostname = server.livingnow.com.au
mynetworks = 127.0.0.1/32,192.168.16.0/24
mynetworks_style = host
newaliases_path = /usr/bin/newaliases
owner_request_special = no
queue_directory = /private/var/spool/postfix
readme_directory = /usr/share/doc/postfix
recipient_delimiter = +
sample_directory = /usr/share/doc/postfix/examples
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtpd_client_restrictions = permit_mynetworks  reject_rbl_client sbl-xbl.spamhaus.org reject_rbl_client bl.spamcop.net permit
smtpd_pw_server_security_options = cram-md5,login,plain
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination,permit
smtpd_sasl_auth_enable = yes
smtpd_tls_key_file = 
smtpd_use_pw_server = yes
unknown_local_recipient_reject_code = 550

有時,它需要啟動(很快更換整個伺服器),但是當出現問題時,會發出無法送達的通知:

Final-Recipient: rfc822; [email protected]
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; Command time limit exceeded:
   "/usr/bin/cyrus/bin/deliver"

在 master.cf 中,指令列出為:

# Also specify in main.cf: cyrus_destination_recipient_limit=1
cyrus     unix  -       n       n       -       10      pipe
  user=cyrusimap argv=/usr/bin/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

我們通常會偵測到問題並重新啟動解決問題的服務,但今天我們花了一兩個小時才檢測到它,並且許多寄件者收到了此通知,這不太理想。

有什麼辦法可以增加命令時間限制嗎?

答案1

這個答案幾乎是題外話,但如果 Cyrus 足夠古老(v2.1.x 或更早版本)或使用 BerkeleyDB 後端而不是稍後介紹的 Skiplist,則可能會幫助您實際修復 Cyrus。

較舊的 Cyrus IMAPd 的問題是預設情況下其 BerkeleyDB 使用 BDB 的預設設定。預設值非常小; 256千位元組記憶體快取等。如果有大量郵件要發送給 Cyrus,那麼很快就會導致 BerkeleyDB 陷入僵局。

若要查看您目前的 Cyrus BerkeleyDB 狀態:

cd /path/to/your/cyrus/datadir (the dir with mailboxes.db and so on)
db_stat -m *.db

(此db_stat指令很可能採用 的形式db_XYstat,其中 XY 代表 BerkeleyDB 版本)

如果這表明您的快取大小值非常低,請繼續隨意增加它們。

首先,停止 Cyrus 並製作該資料目錄的備份副本,以確保萬無一失。

然後,在資料目錄中,建立一個名為“DB_CONFIG”的檔案並使其至少包含這一行

set_cachesize    0   16777216  0

這會將記憶體快取大小增加到 16 MB,這對於相當大的安裝來說也足夠了。

確保 DB_CONFIG 檔案由與 Cyrus 相同的使用者帳戶擁有。

若要實際啟動快取更改,請執行一個名稱嚇人的指令db_recover(也可能採用 的形式dbXY_recover。確保您以 Cyrus 使用者而非 root 使用者身分執行該指令。

重新啟動Cyrus,看看是否有效,db_stat -m *.db再次運行看看數值是否改變。

相關內容