Forçar o início do apache após o mysql

1

Eu tenho o problema que meu apache2 não inicia na inicialização. Após a depuração, descobri que um script de inicialização da página tentou conectar-se ao MySQL que não está em execução no momento.

Meu sistema operacional é o Ubuntu Server 10.04.4

A inicialização do apache2 é configurada usando update-rc.d apache2 defaults 21 , que cria os scripts em /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

e chama /etc/init.d/apache2

O mysql está sendo iniciado pelo iniciante do Ubuntu:

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

Como posso forçar o apache2 a iniciar o AFTER mysql?

Atualização:

Como já recebi alguns comentários, aqui um esclarecimento:

O Apache é iniciado como um script sysvinit em /etc/rc*.d/ , enquanto o mysql é um script upstart em /etc/init/ . O mysql não está listado em /etc/rc*.d e, portanto, não posso alterar a prioridade alterando a ordem alfabética!

    
por SailAvid 05.06.2013 / 20:49

1 resposta

2

Para responder minha própria pergunta:

Aqui está uma maneira rápida e suja de bloquear o script do apache até que o mysqld seja iniciado:

Substitua as duas linhas em /etc/init.d/apache2

 log_daemon_msg "Starting web server" "apache2"
 if $APACHE2CTL start; then

com

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

Isto verifica a cada segundo se o mysql está em execução (o tempo máximo de verificação é de 60 segundos).

Mas deve haver uma maneira melhor de definir dependências entre os serviços sysvinit e upstart?!

    
por 05.06.2013 / 21:35