Jak mogę uruchomić usługę systemową dopiero po uruchomieniu mysql?

15

Pracuję nad projektem, który jest mono EmailServer. Próbowałem dodać usługę do systemd, aby uruchamiała się automatycznie podczas rozruchu, ale mam problem.

Utworzyłem skrypt i dodałem go, /lib/systemd/system/emailserver.servicea następnie uruchomiłem ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service.

Następnie wykonałem, systemd reload-daemona systemctl start emailserver.servicepotem, kiedy biegnę ps -ef |grep -i emailserver, widzę, że mono EmailServer.exedziała, a wszystko wygląda dobrze.

Jednak po ponownym uruchomieniu serwera w /var/log/messagespliku zawiera on następujący komunikat o błędzie

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.

W moim skrypcie emailserver.service mam następujące

[Unit]
Description=Boardies Email Server Startup Script

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

[Install]
WantedBy=multi-user.target

Używam OpenSuse 12.1

Co robię źle, dziękuję za wszelką pomoc, którą możesz udzielić.

AKTUALIZACJA Dowiedziałem się, co powoduje, że program przestaje działać podczas uruchamiania, ale nie jestem pewien, jak mogę rozwiązać ten problem. Mój program opiera się na bazie danych MySQL i myślę, że mój program uruchamia się przed uruchomieniem MySQL. Jak mogę sprawić, by moja usługa nie ładowała się, dopóki MySQL nie uruchomi się.

Boardy
źródło
Powinieneś rzucić okiem na kilka przykładów, np .: en.gentoo-wiki.com/wiki/Systemd lub wiki.archlinux.org/index.php/Systemd/Services
Ulrich Dangel

Odpowiedzi:

30

Dodaj After=mysql.servicedo pliku usługi (lub zmień go na prawidłową nazwę usługi), np .:

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

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

[Install]
WantedBy=multi-user.target

Pamiętaj, że nie musisz umieszczać pliku usługi w / lib / systemd / system, jest to plik udostępniony przez użytkownika i powinieneś tylko skopiować go do / etc / systemd / system.

Aby uzyskać listę wszystkich plików usługi, których możesz użyć, systemctl list-unit-filesi określ poprawną nazwę usługi bazy danych (prawdopodobnie jest to albo mysql.service lub mysqld.service)

Ulrich Dangel
źródło
czy możemy mieć wiele After=*.servicei zamówić?
Ciasto piekarz