Timeout für Postfix/Cyrus „Befehlszeitlimit überschritten“ erhöhen?

Timeout für Postfix/Cyrus „Befehlszeitlimit überschritten“ erhöhen?

Ich habe einen alten OS X Server 10.4.x mit Postfix 2.1.5, der für die Verwendung von Cyrus als Postfachtransport konfiguriert ist.

Hier ist 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

Hin und wieder ist ein Kickstart erforderlich (dazu muss bald der gesamte Server ersetzt werden), aber wenn ein Problem auftritt, werden Unzustellbarkeitsbenachrichtigungen versendet mit:

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

In master.cf wird dieser Befehl wie folgt aufgeführt:

# 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}

Normalerweise erkennen wir das Problem und starten die Dienste neu, wodurch es behoben wird. Heute hat es jedoch ein oder zwei Stunden gedauert, bis wir es erkannt haben, und viele Absender haben diese Benachrichtigung erhalten, was nicht gerade optimal ist.

Gibt es eine Möglichkeit, das Befehlszeitlimit zu erhöhen?

Antwort1

Diese Antwort ist fast nicht zum Thema, könnte Ihnen aber tatsächlich bei der Reparatur Ihres Cyrus helfen, wenn es alt genug ist (v2.1.x oder älter) oder das BerkeleyDB-Backend anstelle der später eingeführten Skiplist verwendet.

Das Problem mit dem älteren Cyrus IMAPd war, dass BerkeleyDB standardmäßig die Standardeinstellungen von BDB verwendete. Die Standardeinstellungen sind wahnsinnig klein; 256Kilobytedes In-Memory-Cache usw. Das führt sehr schnell zu BerkeleyDB-Deadlocks, wenn viele E-Mails an Cyrus zugestellt werden müssen.

So zeigen Sie Ihren aktuellen Cyrus BerkeleyDB-Status an:

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

(Der db_statBefehl könnte durchaus die Form haben db_XYstat, wobei XY für die BerkeleyDB-Version steht)

Wenn Ihnen dabei sehr niedrige Werte für die Cache-Größen angezeigt werden, können Sie diese nach Belieben erhöhen.

Stoppen Sie zunächst Cyrus und erstellen Sie sicherheitshalber eine Sicherungskopie dieses Datenverzeichnisses.

Erstellen Sie dann im Datenverzeichnis eine Datei namens ´DB_CONFIG` und stellen Sie sicher, dass sie mindestens diese Zeile enthält

set_cachesize    0   16777216  0

Dadurch würde sich die Größe des In-Memory-Cache auf 16 Megabyte erhöhen, was auch für relativ große Installationen ausreicht.

Stellen Sie sicher, dass die Datei DB_CONFIG demselben Benutzerkonto gehört wie Cyrus.

Um die Cache-Änderungen tatsächlich zu aktivieren, führen Sie einen Befehl mit einem beängstigenden Namen aus db_recover(kann auch die Form haben) dbXY_recover. Stellen Sie sicher, dass Sie den Befehl als Cyrus-Benutzer und nicht beispielsweise als root ausführen.

Starten Sie Cyrus neu und prüfen Sie, ob es funktioniert. Führen Sie es db_stat -m *.dberneut aus, um zu prüfen, ob sich die Werte geändert haben.

verwandte Informationen