Назад | Перейти на главную страницу

Принудительный запуск 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 запускается как сисвинит сценарий под /etc/rc*.d/ тогда как mysql - это выскочка сценарий под /etc/init/. Mysql не указан в /etc/rc*.d и поэтому я не могу изменить приоритет, изменив алфавитный порядок!

Чтобы ответить на мой собственный вопрос:

Вот быстро и грязно способ заблокировать скрипт 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 и службами выскочки ?!