1

メール アカウントをチェックし、メールをダウンロードして解析するカスタム コマンドがあります。それに関する詳細は、この問題には関係ありません。

シェルからこのコマンドを実行すると、次のようになります。

cd /project_dir
./manage.py check_mail

毎回元気に走っています。crontab 経由で同じコマンドを実行すると、おかしな DB エラーが返されます。

django.db.utils.DatabaseError: SSL error: sslv3 alert bad record mac

そして、コードのさまざまなポイントからその例外を返します。常に(非常に単純な)選択クエリから。

crontab エントリは非常に単純です。

*/5 * * * * cd /project_dir && ./manage.py check_mail

そして、上記のテストでログインしたのと同じユーザーによって実行されます。

サブプロセスからクエリを実行するときに、以前にPostgreSQLとDjangoでこの「SSLエラー」を見つけたので、次のように接続を閉じて新しい接続を強制的に作成することで解決しました。

from django.db import connection
connection.close()

しかし、この場合は役に立ちません。postgresql ログには多くの情報が追加されません。

2013-01-19 16:03:09 GMT LOG:  SSL error: decryption failed or bad record mac
2013-01-19 16:03:09 GMT LOG:  could not receive data from client: Connection reset by peer
2013-01-19 16:03:09 GMT LOG:  unexpected EOF on client connection

Python 2.6 と Django 1.4 を使用しています。これは、これらのエラーの 1 つの (ほぼ) 完全なトレースバックですが、前述したように、常に同じクエリから発生するとは限りません。

File "/project_dir/appname/checkmail.py", line 527, in get_message
    message = object.message_set.all().order_by('-time')[0]

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 207, in __getitem__
    return list(qs)[0]   

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 87, in __len__
    self._result_cache.extend(self._iter)   

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/query.py", line 291, in iterator
    for row in compiler.results_iter():   

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/sql/compiler.py", line 763, in results_iter
    for rows in self.execute_sql(MULTI):   

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/models/sql/compiler.py", line 818, in execute_sql
    cursor.execute(sql, params)   

File "/usr/local/lib/python2.6/dist-packages/Django-1.4-py2.6.egg/django/db/backends/postgresql_psycopg2/base.py", line 52, in execute
    return self.cursor.execute(query, args) 

django.db.utils.DatabaseError: SSL error: sslv3 alert bad record mac

アイデアはありますか?

4

2 に答える 2

1

Check that crontab is running the same version of python. My crontab entries actually look like the following:

*/10 * * * * cd /projectdir ; PYTHONPATH=/home/myhome/python/south:/home/myhome/python /usr/local/bin/python2.6 manage.py notify
于 2013-01-19T18:26:09.883 に答える