我有一个旧的 OS X Server 10.4.x 运行 Postfix 2.1.5,它被配置为使用 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
Run Code Online (Sandbox Code Playgroud)
时不时地,它需要启动(尽快更换整个服务器),但是当它出现问题时,会发出无法送达的通知:
Final-Recipient: rfc822; user@host.com
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; Command time limit exceeded:
"/usr/bin/cyrus/bin/deliver"
Run Code Online (Sandbox Code Playgroud)
在 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}
Run Code Online (Sandbox Code Playgroud)
我们通常会检测问题并重新启动解决问题的服务,但今天我们花了一两个小时才检测到它,许多发件人收到了这个通知,这不太理想。
有没有办法增加命令时间限制?
这个答案几乎是题外话,但如果 Cyrus 足够古老(v2.1.x 或更旧)或者使用 BerkeleyDB 后端而不是稍后引入的 Skiplist,它可能会帮助您实际修复 Cyrus。
旧版 Cyrus IMAPd 的问题在于,默认情况下,其 BerkeleyDB 使用 BDB 的默认设置。默认值非常小;256 KB的内存缓存等等。如果有大量邮件要发送给 Cyrus,这很快就会导致 BerkeleyDB 陷入僵局。
要查看您当前的 Cyrus BerkeleyDB 状态:
cd /path/to/your/cyrus/datadir (the dir with mailboxes.db and so on)
db_stat -m *.db
Run Code Online (Sandbox Code Playgroud)
(该db_stat
命令很可能采用 形式db_XYstat
,其中 XY 代表 BerkeleyDB 版本)
如果这显示您的缓存大小值非常低,请继续并随意增加它们。
首先,为了确定起见,停止 Cyrus 并制作该数据目录的备份副本。
然后,在数据目录中,创建一个名为“DB_CONFIG”的文件并使其至少包含这一行
set_cachesize 0 16777216 0
Run Code Online (Sandbox Code Playgroud)
这会将内存缓存大小增加到 16 兆字节,这对于相当大的安装也足够了。
确保 DB_CONFIG 文件由与 Cyrus 相同的用户帐户拥有。
要实际激活缓存更改,请运行一个名字很吓人的命令db_recover
(也可能是dbXY_recover
.
重新启动 Cyrus,看看它是否有效,db_stat -m *.db
再次运行以查看值是否改变。
归档时间: |
|
查看次数: |
1199 次 |
最近记录: |