Upstart: inicie o serviço após um processo não-upstart

11

No Ubuntu 10.04, preciso iniciar meu serviço com upstart, mas somente quando o mysql estiver em funcionamento.

O problema é que o mysql em si não é tratado pelo iniciante, então não posso usar o recurso "iniciar".

O que eu posso fazer ?

Falken
fonte

Respostas:

15

Você tem poucas 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 tratado adicionando a initctlchamada a /etc/init.d/mysql.

2) Desative o mysql dos níveis de execução normais do SysV e crie um trabalho Upstart do wrapper que o inicia (não isso não lida com a parada - 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

Então, 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 /etc/rc?.dlinks ao /etc/init.d/mysqlscript de serviço original . Além disso, você pode achar que o mysql não está realmente pronto até algum tempo após o início do pid principal. Os bancos de dados são problemáticos, pois podem levar algum tempo para ficarem "online", mesmo após o início (repetição do log de transações, etc.).

3) Crie um trabalho inicial ("garçom") que "inicie na parada rc" (ou seja, inicie quando todos os trabalhos do SysV alegarem ter terminado) e, em seguida, faça uma sondagem esperando que o mysql esteja pronto e saia. Faça seu trabalho "iniciar no garçom parado".

4) Converta o mysql em um trabalho Upstart (a melhor opção). Há um ponto de partida para uma configuração inicial do mysql aqui: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
fonte
1
Depois de olhar em volta, esta resposta resume todas as opções que tenho. Também obrigado por apontar a diferença entre "mysql iniciado" e o momento em que o mysql está realmente disponível. Vamos ver se o nº 4 já foi tentado em algum lugar.
Falken 28/03
A opção 3 requer "iniciar no garçom iniciado". Não está parado.
Adeandrade 18/07
a opção 1 se encaixa bem no nosso modelo! Primeiro, baixamos todos os scripts iniciantes de um servidor de configuração via script python que é executado e os.system('/sbin/initctl emit consul-finished'), em seguida, iniciamos outros serviços porstart on consul-finished
CMag
Obrigado por isso, meu amigo! Basicamente, eu acabei tendo que sed substituir initctl emit cloud-init-finishedum serviço sysv para ser capaz de ligar
Jose Alban
0

Sugiro iniciar seu trabalho inicial após a conclusão de todos os trabalhos não iniciados :

start on started rc

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

Adereços: /server//a/533481

Dave Gregory
fonte
-1

Que tal usar

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

dentro do seu trabalho inicial!

kaji
fonte
... que não iniciará magicamente o trabalho inicial quando o mysql for iniciado.
adaptr
sim, não foi isso que você pediu !!! você pediu o contrário. Pelo menos é assim que eu entendi
kaji
Meu trabalho inicial deve monitorar o mysql e enviar notificações se estiver inoperante. Sinto-me um pouco desconfortável mysql lançamento via o trabalho de monitoramento
Falken
Eu não acho que esteja totalmente errado. Eu faço algo assim: script de pré-inicialização se! /etc/init.d/rabbitmq-server status &> / dev / null; então /etc/init.d/rabbitmq-server start fi end script
maxadamo 11/16