我有问题,我的apache2不启动启动。 debugging后,我发现一个网页的init脚本试图连接到当时没有运行的MySQL。
我的操作系统是Ubuntu Server 10.04.4
apache2引导是使用update-rc.d apache2 defaults 21
,它在/etc/rcX
创build脚本:
root@ser:~# find /etc/rc* -name *apache* /etc/rc0.d/K21apache2 /etc/rc1.d/K21apache2 /etc/rc2.d/S21apache2 /etc/rc3.d/S21apache2 /etc/rc4.d/S21apache2 /etc/rc5.d/S21apache2 /etc/rc6.d/K21apache2
并调用/etc/init.d/apache2
mysql是由Ubuntu的新贵开始的:
root@ser:~# ls /etc/init | grep mysql mysql.conf
我如何强制apache2启动AFTER MySQL?
更新:
由于我已经有了一些意见,在这里澄清一下:
Apache在/etc/rc*.d/
下作为sysvinit脚本启动,而mysql是/etc/init/
下的新贵脚本。 Mysql没有列在/etc/rc*.d
下,所以我不能通过改变字母顺序来改变优先级!
回答我自己的问题:
这是一个快速和肮脏的方法来阻止Apache脚本,直到mysqld启动:
replace/etc/init.d/apache2
的两行
log_daemon_msg "Starting web server" "apache2" if $APACHE2CTL start; then
同
log_daemon_msg "Starting web server" "apache2" # wait until mysql started MYSQL_OK=0 WHILE_CNT=0 while [ "$WHILE_CNT" -le 60 ] ; do if [[ `service mysql status` == *running* ]]; then MYSQL_OK=1; break; fi WHILE_CNT=`expr $WHILE_CNT + 1`; sleep 1 done if $APACHE2CTL start; then
如果mysql正在运行,则每隔一秒检查一次(最长检查时间是60秒)。
但是,应该有更好的方法来遏制sysvinit和新兴服务之间的依赖?