web-dev-qa-db-ja.com

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

メールボックストランスポートとしてcyrusを使用するように構成されたPostfix2.1.5を実行している古いOSX Server10.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
jaydisc

この回答はほとんどトピックから外れていますが、Cyrusが十分に古い(v2.1.x以前)場合、または後で導入されたSkiplistの代わりにBerkeleyDBバックエンドを使用している場合は、実際にCyrusを修正するのに役立つ可能性があります。

古いCyrusIMAPdの問題は、デフォルトでそのBerkeleyDBがBDBのデフォルト設定を使用していたことでした。デフォルトはめちゃくちゃ小さいです。 256 kilobytesインメモリキャッシュなど。 Cyrusに配信するメールがたくさんある場合、これはすぐにBerkeleyDBのデッドロックにつながります。

現在のCyrusBerkeleyDBステータスを確認するには:

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を再度実行して、値が変更されたかどうかを確認します。

5