我的 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
也是空的,并且系统日志不包含任何可疑条目。
启动后手动启动 apacheservice 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 没有在启动时启动?
答案1
发现问题:
简而言之:我的网页尝试连接到 MySQL,但此时 MySQL 并未运行。因此 Apache 无法启动。
我更改了以下行/etc/init.d/apache2
以将启动问题记录到系统日志中:
if $APACHE2CTL start; then
到
if $APACHE2CTL -k start -e Debug 2>&1 | logger -t "apache_start"; then
启动后,检查/var/log/syslog
以 开头的条目apache_start
。
下一个问题:如何强制 Apache 在 mysql 之后启动。请参见此处:强制 Apache 在 mysql 之后启动
附加信息:我使用 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 启动命令。(我猜是这样)