Принудительно запустить Apache после MySQL
У меня проблема в том, что мой apache2 не запускается при загрузке. После отладки я обнаружил, что сценарий инициализации веб-страницы пытался подключиться к MySQL, который в то время не работал.
Моя ОС - Ubuntu Server 10.04.4
Apache2 Boot настроен с помощью 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 является сценарий выскочка под /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?!