Mam demona oldschoolowego, który chcę kontrolować za pomocą systemd. Kiedy zmienia się jego plik konfiguracyjny, należy go zabić i uruchomić ponownie. Innymi słowy, po edycji pliku konfiguracyjnego systemctl reload MYSERVICE
należy zakończyć proces i uruchomić go ponownie.
Próba 1: Wypróbuj ustawienia domyślne. Mówi to systemd jak uruchomić demona, ale nie jak go ponownie załadować.
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
W rezultacie start
i restart
działa, ale reload
daje ten błąd:
# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.
Próba 2: Powiedz, jak zabić proces. To zabija proces, ale systemd nie uruchamia go ponownie dla mnie.
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
...śledzony przez...
# systemctl daemon-reload
# systemctl reload MYSERVICE
... zabija proces, ale nie jest restartowany automatycznie.
Próba 3: Użyj ExecReload, aby zrestartować proces. Nie udaje się to z kilku powodów:
ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE
... pojawia się komunikat o błędzie ...:
# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the control process exited with error code. See "systemctl status MYSERVICE.service" and "journalctl -xe" for details.
Spodziewałbym się, że będzie ReloadType = kill_and_restart lub coś takiego, ale bez takiego szczęścia.
Jak powiedzieć systemd, aby zabił i zrestartował demona podczas przeładowywania?