Apache-2.2
強制 apache 在 mysql 之後啟動
我的問題是我的 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 服務之間的依賴關係?!