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 ?
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 initctl
Aufrufs 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?.d
Links 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
os.system('/sbin/initctl emit consul-finished')
, und starten dann andere Dienste bis zumstart on consul-finished
initctl emit cloud-init-finished
einen Sysv-Dienst ersetzen, um eine Verbindung herstellen zu könnenIch schlage vor, Ihren Upstart-Job zu starten, nachdem alle Nicht-Upstart-Jobs abgeschlossen sind:
/etc/init/rc.conf
ist die Sache, die Nicht-Upstart-Jobs von Upstart aus startet.Requisiten: /server//a/533481
quelle
Wie wäre es mit
in Ihrem Emporkömmling!
quelle