Apache-2.2

強制 apache 在 mysql 之後啟動

  • June 6, 2013

我的問題是我的 apache2 沒有在啟動時啟動。調試後我發現一個網頁初始化腳本試圖連接到當時沒有執行的 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 的新貴開始的:

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

如何強制 apache2 在 mysql 之後啟動?

更新:

由於我已經收到了一些評論,這裡澄清一下:

Apache作為sysvinit腳本啟動,/etc/rc*.d/而 mysql是. Mysql 未在下面列出,因此我無法通過更改字母順序來更改優先級!/etc/init/``/etc/rc*.d

回答我自己的問題:

這是一種在啟動 mysqld 之前阻止 apache 腳本的快速而骯髒的方法:

替換中的兩行/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 服務之間的依賴關係?!

引用自:https://serverfault.com/questions/513526