apache2 沒有在啟動時啟動。即使在執行級別中設置
在我的 Ubuntu 10.04.4 伺服器上安裝了 apache2 2.2.14。幾個月前在啟動時啟動 apache2 工作正常。
現在我發現重啟後 apache2 不再自動啟動。
init.d 腳本存在並且應該是預設安裝中的腳本:
root@ser:~# ls /etc/init.d | grep apache apache2
還設置了執行級別啟動(使用
update-rc.d apache2 defaults
):root@ser:~# find /etc/rc* -name *apache* /etc/rc0.d/K20apache2 /etc/rc1.d/K20apache2 /etc/rc2.d/S20apache2 /etc/rc3.d/S20apache2 /etc/rc4.d/S20apache2 /etc/rc5.d/S20apache2 /etc/rc6.d/K20apache2
重新啟動後檢查狀態會導致:
root@ser:~# service apache2 status Apache is NOT running.
ps aux | grep apache
也是空的。查看
/var/log/apache/error.log
啟動時沒有條目。cat /var/log/syslog | grep apache
也是空的,系統日誌不包含任何可疑條目。啟動後手動啟動 apache
service apache2 start
工作正常,不輸出任何錯誤。更新 1: 該
/etc/init.d/apache2
腳本具有以下標頭/要求:### BEGIN INIT INFO # Provides: apache2 # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Short-Description: Start/stop apache2 web server ### END INIT INFO
正在啟動的服務是:
root@ser:~# ls /etc/rc2.d/ README S10sysklogd S20apache2 S20denyhosts S20hashcash-milter S20ido2db S20modules_dep.sh S20postfix S20saslauthd S20vzquota S50rsync S99rc.local S09hostname_vps S15bind9 S20exim4 S20icinga S20memcached S20opendkim S20psad S20xinetd S23ntp S99ondemand
我怎樣才能找出為什麼 apache2 沒有在啟動時啟動?
發現問題:
簡而言之:我的網頁嘗試連接到 MySQL,但此時 MySQL 沒有執行。因此apache無法啟動。
我更改了以下行以
/etc/init.d/apache2
將啟動問題記錄到 syslog:if $APACHE2CTL start; then
到
if $APACHE2CTL -k start -e Debug 2>&1 | logger -t "apache_start"; then
啟動後檢查以 .
/var/log/syslog
開頭的條目apache_start
。下一個問題:如何強制 apache 在 mysql 之後啟動。請參見此處:在 mysql 之後強制啟動 apache
附加資訊:我使用 Perl Catalyst 框架。
這是 apache init 腳本的錯誤輸出:
DBI connect('database:localhost:3306','User',...) failed: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) at /usr/local/share/perl/5.10.1/Catalyst/Plugin/I18N/DBI.pm line 196. Syntax error on line 10 of /etc/apache2/sites-available/mysite: Can't call method "disconnect" on an undefined value at /usr/local/share/perl/5.10.1/Catalyst/Plugin/I18N/DBI.pm line 263, <DATA> line 998.\nCompilation failed in require at (eval 4) line 3, <DATA> line 998.\n
我認為語法錯誤是由先前的錯誤引起的。因為第 10 行是:
PerlModule CatalystPageName
如果 mysql 執行,則工作正常。
我還沒有發現本地化模組在啟動時連接的原因。我們有其他具有相同模組的網頁在啟動時沒有此問題/連接。由於它無法連接以下斷開連接導致 Perl 中的異常中止 apache2crl start 命令。(這是我猜的)