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 ?

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


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


-1

¿Qué hay de usar

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

dentro de tu trabajo advenedizo!


... 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.