Rhel
不知道如何解決 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";
我已經通過在此故障排除的整個過程中將 SELinux 切換為 Permissive 來驗證 SELinux 不是問題,並且我創建了簡單的 perl 腳本,當通過 Apache httpd 呼叫時發送我的個人電子郵件帳戶。對於這個錯誤, httpd
error_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
基本上,我不確定從哪裡獲取它,我不知道如何讓 Bugzilla 為我提供更多描述性錯誤資訊。我知道在管理上我沒有改變任何東西,有足夠的處理器時間和儲存空間可用,所以我不確定它為什麼突然壞了。
這是在裝有 Perl 5.8.8 的 RHEL5 機器上
當我被這樣卡住時,我會經常使用strace來尋找線索。
這是一個方便的單線器
ps -ef |grep apache |grep -v grep |awk '{print $2}' | while read pid ; do sudo strace -p$pid -o /tmp/strace.$pid & done
它獲取所有 apache pid,並為每個 pid 附加一個 strace,將它們的輸出分別寫入**/tmp/中的不同文件**
完成後,重現錯誤,然後終止所有 strace 程序:
sudo killall strace
查找 strace 生成的最大文件,它們可能是相關 apache 程序的 strace:
ls -lSrh /tmp/strace.*
看看那裡是否有任何線索(包含 ENO 或 ERR 的行特別令人感興趣)。