Upstart: Starten Sie den Dienst nach dem Nicht-Upstart-Prozess

11

Unter Ubuntu 10.04 muss ich meinen Dienst mit Upstart starten, aber nur, wenn MySQL läuft.

Das Problem ist, dass MySQL selbst nicht von Upstart verarbeitet wird, sodass ich die Funktion "Start on" nicht verwenden kann.

Was kann ich tun ?

Falken
quelle

Antworten:

15

Sie haben einige Möglichkeiten:

1) Lassen Sie MySQL Upstart darüber informieren, dass es mit der Ausgabe eines Ereignisses begonnen hat

initctl emit mysql-started" o.ä.

Dies könnte durch Hinzufügen des initctlAufrufs zu behandelt werden /etc/init.d/mysql.

2) Deaktivieren Sie MySQL in den normalen SysV-Runlevels und erstellen Sie einen Wrapper-Upstart-Job, der ihn startet (dies ist kein Stopp - nur ein Beispiel):

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

Dann haben Sie Ihren Job " start on started mysql-sysv".

Das Problem hierbei ist, dass Sie auf Probleme stoßen, wenn jemand (oder ein Systemtool automatisch) die /etc/rc?.dLinks zum ursprünglichen Dienstskript erneut hinzufügt /etc/init.d/mysql. Möglicherweise stellen Sie auch fest, dass MySQL erst einige Zeit nach dem Start der Haupt-PID bereit ist. Datenbanken sind problematisch, da es einige Zeit dauern kann, bis sie "online" sind, selbst nachdem sie gestartet wurden (Wiedergabe des Transaktionsprotokolls usw.).

3) Erstellen Sie einen Upstart-Job ("Kellner"), der "Start auf gestopptem RC" ausführt (dh Start, wenn alle SysV-Jobs behauptet haben, beendet zu sein) und dann Umfragen abwartet, die darauf warten, dass MySQL fertig wird, und dann beendet wird. Lassen Sie Ihren Job "mit angehaltenem Kellner beginnen".

4) Konvertieren Sie MySQL in einen Upstart-Job (die beste Option). Hier oben finden Sie einen Ausgangspunkt für eine MySQL-Konfiguration: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

Jamesodhunt
quelle
1
Nachdem ich mich umgesehen habe, fasst diese Antwort alle Optionen zusammen, die ich habe. Vielen Dank auch, dass Sie auf die Lücke zwischen "gestartetem MySQL" und dem Zeitpunkt hingewiesen haben, zu dem MySQL tatsächlich verfügbar ist. Mal sehen, ob # 4 schon irgendwo ausprobiert wurde.
Falken
Option 3 erfordert "Start am gestarteten Kellner". Nicht auf gestoppt.
Adeandrade
Option 1 passt gut zu unserem Modell! Wir laden zuerst alle Upstart-Skripte von einem Konfigurationsserver über ein Python-Skript herunter, das ausgeführt wird os.system('/sbin/initctl emit consul-finished'), und starten dann andere Dienste bis zumstart on consul-finished
CMag
Danke dafür, mein Freund! Grundsätzlich musste ich initctl emit cloud-init-finishedeinen Sysv-Dienst ersetzen, um eine Verbindung herstellen zu können
Jose Alban
0

Ich schlage vor, Ihren Upstart-Job zu starten, nachdem alle Nicht-Upstart-Jobs abgeschlossen sind:

start on started rc

/etc/init/rc.conf ist die Sache, die Nicht-Upstart-Jobs von Upstart aus startet.

Requisiten: /server//a/533481

Dave Gregory
quelle
-1

Wie wäre es mit

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

in Ihrem Emporkömmling!

Kaji
quelle
... das startet den Upstart- Job nicht auf magische Weise, wenn MySQL startet.
Adaptr
Ja, das hast du nicht gefragt !!! Sie haben nach einem anderen Weg gefragt. Zumindest habe ich das so verstanden
Kaji
Mein Startjob soll MySQL überwachen und Benachrichtigungen senden, wenn es nicht funktioniert. Ich fühle mich ein bisschen unwohl, wenn ich MySQL über den Überwachungsjob starte
Falken
Ich denke nicht, dass das völlig falsch ist. Ich mache so etwas: Pre-Start-Skript wenn! /etc/init.d/rabbitmq-server status &> / dev / null; dann /etc/init.d/rabbitmq-server start fi end script
maxadamo