Wie kann ich einen systemd-Dienst erst starten, nachdem mysql gestartet wurde?

14

Ich arbeite an einem Projekt, das ein Mono EmailServer ist. Ich habe versucht, einen Dienst zum systemd hinzuzufügen, damit dieser beim Booten automatisch gestartet wird, aber ich habe ein Problem.

Ich habe das Skript erstellt und hinzugefügt /lib/systemd/system/emailserver.serviceund dann ausgeführt ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Ich habe dann ausgeführt, systemd reload-daemongefolgt von systemctl start emailserver.serviceund wenn ich dann laufe, ps -ef |grep -i emailserverkann ich dann sehen, dass mono EmailServer.exeläuft, alles sieht soweit gut aus.

Wenn ich den Server in der /var/log/messagesDatei neu starte, wird die folgende Fehlermeldung angezeigt

Jul 16 19:41:02 dev-server systemd[1]: emailserver.service holdoff
time over, scheduling restart. Jul 16 19:41:02 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:03 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:03 dev-server systemd[1]: emailserver.service holdoff time over,
scheduling restart. Jul 16 19:41:04 dev-server systemd[1]:
emailserver.service holdoff time over, scheduling restart. Jul 16
19:41:04 dev-server systemd[1]: emailserver.service start request
repeated too quickly, refusing to start.

In meinem emailserver.service-Skript habe ich Folgendes

[Unit]
Description=Boardies Email Server Startup Script

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Ich verwende OpenSuse 12.1

Was mache ich falsch, danke für jede Hilfe, die Sie leisten können.

UPDATE Ich habe herausgefunden, warum das Programm beim Booten nicht mehr funktioniert, bin mir aber nicht sicher, wie ich dieses Problem beheben kann. Mein Programm basiert auf einer MySQL-Datenbank und ich glaube, mein Programm wird vor dem Start von MySQL gestartet. Wie kann ich dafür sorgen, dass mein Dienst erst nach dem Start von MySQL geladen wird?

Boardy
quelle
Sie sollten sich einige Beispiele ansehen, zB: en.gentoo-wiki.com/wiki/Systemd oder wiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

Antworten:

29

Ergänzen Sie After=mysql.serviceIhre Servicedatei (oder ändern Sie sie in den korrekten Servicenamen), zB:

[Unit]
Description=Boardies Email Server Startup Script
After=mysql.service

[Service]
ExecStart=/home/bits/EmailServer/start.email
Restart=always

[Install]
WantedBy=multi-user.target

Bitte beachten Sie, dass Sie Ihre Servicedatei nicht in / lib / systemd / system ablegen müssen. Es handelt sich um eine vom Benutzer bereitgestellte Datei, die Sie nur nach / etc / systemd / system kopieren sollten.

Um eine Liste aller Servicedateien zu erhalten, können Sie systemctl list-unit-filesden richtigen Namen für Ihren Datenbankservice festlegen (es handelt sich wahrscheinlich entweder um mysql.service oder mysqld.service).

Ulrich Dangel
quelle
Können wir mehrere After=*.serviceund bestellte haben?
Ciasto piekarz