Postfix/Cyrus の「コマンドの時間制限を超えました」のタイムアウトを増やしますか?

Postfix/Cyrus の「コマンドの時間制限を超えました」のタイムアウトを増やしますか?

私は、メールボックストランスポートとして cyrus を使用するように設定された Postfix 2.1.5 を実行している古い OS X Server 10.4.x を持っています。

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 ~ 2 時間かかり、多くの送信者がこの通知を受け取りました。これは理想的とは言えません。

コマンドの時間制限を増やす方法はありますか?

答え1

この回答はほとんど話題から外れていますが、Cyrus がかなり古い (v2.1.x 以前) 場合、または後で導入された Skiplist の代わりに BerkeleyDB バックエンドを使用している場合は、実際に 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 メガバイトに増加し、非常に大規模なインストールにも十分になります。

DB_CONFIG ファイルが Cyrus と同じユーザー アカウントによって所有されていることを確認します。

キャッシュの変更を実際に有効にするには、恐ろしい名前のコマンドdb_recover( の形式である場合もあります)を実行しますdbXY_recover。コマンドは、たとえば root ではなく、必ず Cyrus ユーザーとして実行してください。

Cyrus を再起動して動作するかどうかを確認し、db_stat -m *.db再度実行して値が変更されたかどうかを確認します。

関連情報