1


Ubuntu 14.04.1 LTS で実行している私の Amavis は、 「pyzor: check failed: internal error, python traceback seen in response」という内容の約 4 通のメールを毎日私に送信
します。それ、私はググった...

最初のヒントは「pyzor ping」でした。ユーザー amavis として実行したところ、結果は "public.pyzor.org:24441 (200, 'OK')" でした。

それで問題ないようです。生きてる。次に、「機能する」かどうかをテストしました。

Input:
spamassassin -D pyzor <1415394952.V54I4460799M230590.h2063374.stratoserver.net\:2\,Sa

Feedback:
Nov 25 08:48:16.182 [13757] dbg: pyzor: network tests on, attempting Pyzor
Nov 25 08:48:30.944 [13757] dbg: pyzor: pyzor is available: /usr/bin/pyzor
Nov 25 08:48:30.945 [13757] dbg: pyzor: opening pipe: /usr/bin/pyzor --homedir /etc/mail/spamassassin check < /tmp/.spamassassin13757wvlpQJtmp
Nov 25 08:48:30.992 [13757] dbg: pyzor: [13759] finished successfully
Nov 25 08:48:30.992 [13757] dbg: pyzor: got response: public.pyzor.org:24441 (200, 'OK') 1 0

グーグルでさらに検索した結果、何の助けにもならなかったので、「/usr/sbin/amavisd-new-cronjobのコンテンツを調べてください!」と思いました。

#!/bin/bash

# amavisd-new cronjob helper
#
# Run it as the amavis user
#
# First parameter specifies which cronjob routine to run:
#               sa-sync:        spamassassin fast sync
#               sa-clean:       spamassassin cleanup

test -e /usr/bin/sa-learn || exit 0
test -e /usr/sbin/amavisd-new || exit 0

if [ "$(id --name -u)" != "amavis" ]
then
    echo "Please run this cronjob as user amavis"
    exit 1
fi

set -e
umask 022

if ! perl -MMail::SpamAssassin -e "my \$spamtest = Mail::SpamAssassin->new();
\$spamtest->compile_now (); \$spamtest->{conf}->{use_bayes} ? exit 0 : exit 1"
then
        #bayes is disabled - just exit
        exit
fi

case $1 in
        sa-sync)
                /usr/bin/sa-learn --sync 2>&1 >/dev/null
                ;;
        sa-clean)
                /usr/bin/sa-learn --sync --force-expire 2>&1 >/dev/null
                ;;
        *)
                echo "$0: unknown cron routine $1" >&2
                exit 1
                ;;
esac

exit 0

ユーザー Amavis として "sa-sync" と "sa-clean" を正常に実行できたので、エラーはさらに上のどこかにあるはずです。

次の行にコメントしたところ、突然 amavisd-new-cronjob をユーザー amavis としてエラーなしで実行できました...

#if ! perl -MMail::SpamAssassin -e "my \$spamtest = Mail::SpamAssassin->new();
#\$spamtest->compile_now (); \$spamtest->{conf}->{use_bayes} ? exit 0 : exit 1"
#then
#        #bayes is disabled - just exit
#        exit
#fi

これらの行が何をするのか、またはユーザー amavis がそれらを正常に実行するためにどの権限が必要なのかがわからないため、そのままにしておくのは気分が悪いです。

この問題を解決する方法のヒントはありますか?

4

1 に答える 1

4

最近、cron からのメールと同じエラーが発生したため、この問題について調査しました。私のサーバーは Debian Wheezy で動作しています。

文書化されたコマンド ラインを使用して pyzor をテストすることで、エラーを追跡できます。

$ su - amavis -c "echo test | spamassassin -D pyzor 2>&1 | less"

もちろん、実際のテスト結果を得るために、「エコー テスト」を実際のスパム メールに置き換えることができます。しかし、BTT: 私の場合、問題は amavis が /etc/spamassassin/servers を読み取る権限を持っていなかったことです。ファイルのグループと権限を変更することでこれを解決しました

$ ls -l /etc/spamassassin/servers
-rw------- 1 debian-spamd root 23 Mär 27 10:34 /etc/spamassassin/servers
$ chgrp amavis /etc/spamassassin/servers; chmod g+r /etc/spamassassin/servers

それが本当に役に立ったかどうかを確認するには、(上記の) テスト コマンド ラインを再実行するだけです。これで、エラーなしで返されるはずです。

乾杯、マルコ

于 2015-04-02T09:14:37.667 に答える