Upstart: iniciar o serviço após o processo não iniciado

11

No Ubuntu 10.04, preciso iniciar meu serviço com o upstart, mas apenas quando o mysql estiver ativo e em execução.

O problema é que o próprio mysql não é tratado pelo upstart, então não posso usar o recurso "start on".

O que posso fazer?

    
por Falken 16.03.2012 / 12:38

3 respostas

15

Você tem algumas opções:

1) faça o mysql informar ao Upstart que ele começou emitindo um evento

initctl emit mysql-started "ou similar.

Isso pode ser feito adicionando a invocação initctl a /etc/init.d/mysql .

2) Desative o mysql dos runlevels normais do SysV e crie um job Upstart do wrapper que   inicia-se (não isso não funciona para parar - apenas um exemplo):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

Depois, tenha seu trabalho " start on started mysql-sysv ".

O problema aqui é que você terá problemas se alguém (ou alguma ferramenta do sistema automaticamente) adicionar novamente os links /etc/rc?.d ao script original /etc/init.d/mysql service. Além disso, você pode descobrir que o mysql não está realmente pronto até que algum tempo após seu pid principal tenha sido iniciado. Bancos de dados são problemáticos, já que podem levar algum tempo para se tornarem “online” mesmo depois de terem começado (repetição do log de transcrições, etc.).

3) Crie um job upstart ("waiter") que faça "start on stopped rc" (isto é, start quando todas as tarefas SysV tiverem terminado) e então faça polls esperando que o mysql fique pronto e então saia. Faça o seu trabalho "começar com o garçom parado".

4) Converta o mysql para um trabalho do Upstart (a melhor opção). Há um ponto de partida para uma configuração do mysql upstart aqui: link

    
por 28.03.2012 / 18:38
0

Eu sugiro começar seu trabalho iniciante depois que todos os trabalhos não iniciantes estiverem concluídos:

start on started rc

/etc/init/rc.conf é o que inicia trabalhos não iniciantes de dentro do upstart.

Adereços: link

    
por 18.12.2017 / 12:07
-1

Que tal usar

pre-start exec /etc/init.d/mysql start

dentro do seu trabalho inicial!

    
por 16.03.2012 / 12:54