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.service
a następnie uruchomiłem ln -s /lib/systemd/system/emailserver.service /etc/systemd/system/emailserver.service
.
Następnie wykonałem, systemd reload-daemon
a systemctl start emailserver.service
potem, kiedy biegnę ps -ef |grep -i emailserver
, widzę, że mono EmailServer.exe
działa, a wszystko wygląda dobrze.
Jednak po ponownym uruchomieniu serwera w /var/log/messages
pliku 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ę.
Odpowiedzi:
Dodaj
After=mysql.service
do pliku usługi (lub zmień go na prawidłową nazwę usługi), np .: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-files
i określ poprawną nazwę usługi bazy danych (prawdopodobnie jest to albo mysql.service lub mysqld.service)źródło
After=*.service
i zamówić?