0

当有人试图发送电子邮件时,我在 /var/log/exim_mainlog 中遇到了一些奇怪的错误。问题是我无法解决这个问题,所以我会在这里尝试。

2012-10-29 00:35:54 DBD::SQLite::db prepare failed: database is locked at /etc/exim_greylist_sqlite.pl line 1013, <HAN1> line 66.
2012-10-29 00:35:54 H=valid_hostname [valid_ip]:5555 F=<mail@example.com> temporarily rejected RCPT <mail@example.com>: failed to expand ACL string "${perl{greylist}}": Can't call method "execute" on an undefined value at /etc/exim_greylist_sqlite.pl line 1014, <HAN1> line 66.
2012-10-29 00:35:54 SMTP connection from valid_hostname [valid_ip]:5555 closed by QUIT

exim_greylist_sqlite 中的一些行:

1012     my $query = "select strftime('%s', block_expires, 'utc')-strftime('%s','now') from relaytofrom where rcpt_to='$lp' and mail_from='$sender_addr'";

1013     $sth = $isp->prepare($query) || print FILE "$query\n";
1014     $sth->execute || print FILE "$query\n";
1015     my @status_array = $sth->fetchrow_array;
1016     $sth->finish;

我什至不知道从哪里开始解决这个问题。我尝试在 cPanel 论坛上搜索,尝试以多种方式使用谷歌但没有结果:(

4

1 回答 1

0

这些似乎适用于您的情况:

为什么在使用 Perl 的 DBD::SQLite 时,SQLite 会为事务中的第二个查询提供“数据库已锁定”?

如何在循环中更新 SELECT 返回的行?

听起来一个进程正在选择中间,而其他进程正在做一些试图更新数据的事情。找出还有什么正在访问该 sqlite 数据库并将其锁定。如果我是对的,那么第一行之后的所有内容都只是从根本原因中反击:表锁争用。

于 2012-10-29T01:54:10.910 回答