在mysql之后强制启动apache

我有问题,我的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和新兴服务之间的依赖?