不知道如何解决 Bugzilla 电子邮件问题

Bra*_*ley 3 rhel email perl bugzilla

我有一个现在无法发送电子邮件的 Bugzilla 4.2.4 安装。直到大约一个月前(大约三个月后没有问题),它才能毫无问题地发送电子邮件。如果有人发表评论、新错误或其他任何应该生成电子邮件的内容,在他们点击提交后,下一页将永远超时,但最终会返回“内部服务器错误”。

无论他们碰巧尝试做什么都会成功(创建错误、附加文件、发布评论等),因此问题似乎仅在于生成电子邮件。按照官方指南的故障排除建议,我创建了任何内容,errorlog但输出充其量是模糊的:

---------------------------------------------------------------------------
[11817] 06/03/13 13:02:02 global/code-error.html.tmpl mail_send_error 127.0.0.1
[11817] $env(ANSI_COLORS_DISABLED) = 1;
[11817] $env(HOME) = "/root";
[11817] $env(LOGNAME) = "root";
[11817] $env(OLDPWD) = "/root";
[11817] $env(PATH) = "/usr/lib:/usr/sbin:/usr/ucblib";
[11817] $env(PWD) = "/var/www/bugzilla";
[11817] $env(SHELL) = "/bin/sh";
[11817] $env(SHLVL) = 1;
[11817] $env(USER) = "root";
[11817] $env(_) = "/var/www/bugzilla/whine.pl";

---------------------------------------------------------------------------
[23266] 06/03/13 13:17:02 global/code-error.html.tmpl mail_send_error 127.0.0.1
[23266] $env(ANSI_COLORS_DISABLED) = 1;
[23266] $env(HOME) = "/root";
[23266] $env(LOGNAME) = "root";
[23266] $env(OLDPWD) = "/root";
[23266] $env(PATH) = "/usr/lib:/usr/sbin:/usr/ucblib";
[23266] $env(PWD) = "/var/www/bugzilla";
[23266] $env(SHELL) = "/bin/sh";
[23266] $env(SHLVL) = 1;
[23266] $env(USER) = "root";
[23266] $env(_) = "/var/www/bugzilla/whine.pl";
Run Code Online (Sandbox Code Playgroud)

我已经通过在整个故障排除期间将其切换为 Permissive 来验证 SELinux 不是问题,并且我创建了简单的 perl 脚本,当通过 Apache httpd 调用时发送我的个人电子邮件帐户。httpderror_log对这个错误没有什么太有趣的:

[Wed Jun 12 13:21:20 2013] [warn] [client 152.xx.99.118] Timeout waiting for output from CGI script /var/www/bugzilla/post_bug.cgi, referer: http://bugs.xxx.edu/enter_bug.cgi?product=Banner%20INB
[Wed Jun 12 13:21:20 2013] [error] [client 152.xx.99.118] Premature end of script headers: post_bug.cgi, referer: http://bugs.xxx.edu/enter_bug.cgi?product=Banner%20INB
Run Code Online (Sandbox Code Playgroud)

基本上,我不确定从哪里开始,我不知道如何让 Bugzilla 给我更多的描述性错误信息。我知道在管理上我没有改变任何东西,有足够的处理器时间和存储空间可用,所以我不确定为什么它突然坏了。

这是在装有 Perl 5.8.8 的 RHEL5 机器上

Nat*_*zoo 7

当我像这样卡住时,我会经常使用strace来寻找线索。

这是一个方便的单线来做到这一点

ps -ef |grep apache |grep -v grep |awk '{print $2}' | while read pid ; do sudo strace -p$pid -o /tmp/strace.$pid & done
Run Code Online (Sandbox Code Playgroud)

它获取所有 apache pid,并为每个 pid 附加一个 strace,将每个输出写入/tmp/ 中的不同文件

完成后,重现错误,然后终止所有 strace 进程:

sudo killall strace
Run Code Online (Sandbox Code Playgroud)

查找由 strace 生成的最大文件,它们可能是相关 apache 进程的 strace:

ls -lSrh /tmp/strace.*
Run Code Online (Sandbox Code Playgroud)

看看里面是否有任何线索(包含 ENO 或 ERR 的行特别有趣)。

  • +1。您可能还希望将 `-ff` 选项用于 `strace`。 (2认同)