Upstart: iniciar el servicio después de un proceso no upstart

11

En Ubuntu 10.04, necesito comenzar mi servicio con el inicio, pero solo cuando mysql está en funcionamiento.

El problema es que mysql en sí mismo no se maneja en el arranque, por lo que no puedo usar la función "iniciar".

Que puedo hacer ?

Falken
fuente

Respuestas:

15

Tienes pocas opciones:

1) haz que mysql informe a Upstart que ha comenzado emitiendo un evento

initctl emit mysql-started" o similar.

Esto podría manejarse agregando la initctlinvocación a /etc/init.d/mysql.

2) Desactive mysql de los niveles de ejecución normales de SysV y cree un trabajo de reinicio de reinicio que lo inicie (no esto no maneja la detención, solo un ejemplo):

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

Entonces, ten tu trabajo " start on started mysql-sysv".

El problema aquí es que tendrá problemas si alguien (o alguna herramienta del sistema automáticamente) vuelve a agregar los /etc/rc?.denlaces al /etc/init.d/mysqlscript de servicio original . Además, es posible que mysql no esté realmente listo hasta un tiempo después de que su pid principal haya comenzado. Las bases de datos son problemáticas, ya que pueden demorar un tiempo en "conectarse" incluso después de haber comenzado (reproducción del registro de transición, etc.).

3) Cree un trabajo inicial ("camarero") que "comience en el rc detenido" (es decir, comience cuando todos los trabajos de SysV hayan afirmado haber finalizado) y luego realice las encuestas esperando que mysql esté listo y luego salga. Haga que su trabajo "comience con el mesero parado".

4) Convierta mysql en un trabajo Upstart (la mejor opción). Hay un punto de partida para una configuración mysql advenedizo aquí: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
fuente
1
Después de mirar alrededor, esta respuesta resume todas las opciones que tengo. También gracias por señalar la brecha entre "mysql iniciado" y el momento en que mysql está realmente disponible. Veamos si el # 4 ya fue probado en alguna parte.
Falken
La opción 3 requiere "iniciar en el camarero iniciado". No en parado.
adeandrade
¡La opción 1 se adapta bien a nuestro modelo! Primero descargamos todos los scripts de os.system('/sbin/initctl emit consul-finished')inicio desde un servidor de configuración a través de un script de Python que se ejecuta , luego start on consul-finished
iniciamos
Gracias por eso, mi amigo! Básicamente terminé teniendo que reemplazar initctl emit cloud-init-finishedun servicio sysv para poder conectarme
Jose Alban
0

Le sugiero que comience su trabajo inicial después de que todos los trabajos no iniciales hayan terminado:

start on started rc

/etc/init/rc.conf es lo que inicia los trabajos que no se inician desde arriba.

Atrezzo: /server//a/533481

Dave Gregory
fuente
-1

¿Qué hay de usar

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

dentro de tu trabajo advenedizo!

kaji
fuente
... que no arranca mágicamente el advenedizo trabajo cuando comienza MySQL.
Adaptr
si, eso no es lo que preguntaste !!! pediste al revés. Al menos así es como lo entendí
kaji
Se supone que mi trabajo inicial debe monitorear mysql y enviar notificaciones si está inactivo. Me siento un poco incómodo al iniciar mysql a través del trabajo de monitoreo
Falken
No creo que esté completamente mal. Hago algo como esto: guión previo al inicio si! /etc/init.d/rabbitmq-server status &> / dev / null; luego /etc/init.d/rabbitmq-server start fi end script
maxadamo