强制 Apache 在 mysql 之后启动

强制 Apache 在 mysql 之后启动

我遇到了 apache2 无法在启动时启动的问题。经过调试,我发现网页初始化脚本尝试连接 MySQL,但当时 MySQL 并未运行。

我的操作系统是 Ubuntu Server 10.04.4

apache2 启动设置使用update-rc.d apache2 defaults 21它来创建以下脚本/etc/rcX

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 的 upstart 启动:

root@ser:~# ls /etc/init | grep mysql
mysql.conf

我怎样才能强制 apache2 在 mysql 之后启动?

更新:

由于我已经收到了一些评论,因此这里澄清一下:

Apache 以系统初始化脚本/etc/rc*.d/,而 mysql 是一个暴发户下的脚本/etc/init/。Mysql 未列在下面/etc/rc*.d,因此我无法通过更改字母顺序来更改优先级!

答案1

回答我自己的问题:

这里有一个快速而肮脏阻止 apache 脚本直到 mysqld 启动的方法:

替换以下两行/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 和 upstart 服务之间的依赖关系?!

相关内容