После выполнения установки rpm, которая также запускает службу homemade-auth-svc, она кажется, запускается достаточно успешно, но затем выходит из строя и постоянно перезапускается.
journalctl -ex u homemade-auth-svc.service:
Jan 14 21:01:51 UI systemd[1]: Starting A service for homemade authentication....
-- Subject: Unit homemade-auth-svc.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit homemade-auth-svc.service has begun starting up.
Jan 14 21:01:51 UI homemade-auth-svc[1709]: homemade-auth: starting...
Jan 14 21:01:51 UI systemd[1]: Started A service for homemade authentication..
-- Subject: Unit homemade-auth-svc.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit homemade-auth-svc.service has finished starting up.
--
-- The start-up result is done.
Jan 14 21:01:51 UI systemd[1]: homemade-auth-svc.service holdoff time over, scheduling restart.
Jan 14 21:01:51 UI systemd[1]: Stopping A service for homemade authentication....
-- Subject: Unit homemade-auth-svc.service has begun shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit homemade-auth-svc.service has begun shutting down.
Jan 14 21:01:51 UI systemd[1]: Starting A service for homemade authentication....
-- Subject: Unit homemade-auth-svc.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
....
systemctl status homemade-auth-svc:
homemade-auth-svc.service - A service for homemade authentication.
Loaded: loaded (/usr/lib/systemd/system/homemade-auth-svc.service; enabled)
Active: failed (Result: start-limit) since Thu 2016-01-14 21:01:52 PST; 20min ago
Process: 1725 ExecStart=/usr/bin/HomemadeAuthSvc (code=exited, status=0/SUCCESS)
Main PID: 1725 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/homemade-auth-svc.service
Jan 14 21:01:52 UI systemd[1]: homemade-auth-svc.service holdoff time over, scheduling restart.
Jan 14 21:01:52 UI systemd[1]: Stopping A service for homemade authentication....
Jan 14 21:01:52 UI systemd[1]: Starting A service for homemade authentication....
Jan 14 21:01:52 UI systemd[1]: homemade-auth-svc.service start request repeated too quickly, refusing to start.
Jan 14 21:01:52 UI systemd[1]: Failed to start A service for homemade authentication..
Jan 14 21:01:52 UI systemd[1]: Unit homemade-auth-svc.service entered failed state.
homemade-auth-svc.service:
[Unit]
Description=A service for homemade authentication.
After=network.target
[Service]
Type=notify
NotifyAccess=all
ExecStart=/usr/bin/HomemadeAuthSvc
StandardOutput=null
Restart=always
[Install]
WantedBy=multi-user.target
Alias=homemade-auth-svc.service
Мы вызываем sd_notify (0, "READY = 1 "); в дочернем процессе - демон, но это не так кажется, имеет значение, если мы вместо этого сделаем это в родительском элементе после 10 секунд ожидания, тогда успешный выход. systemd просто ждет столько времени, прежде чем дать тот же результат. Как будто он ждет sd_notify (), объявляет об успехе, а затем немедленно перезапускает службу. Теперь rpm изменяет lightdm.service (a служба входа в систему), чтобы зависеть от нас (устанавливает файл с содержимым:
[Unit]
Wants=homemade-auth-svc.service
в: /etc/systemd/system/lightdm.service.d/ )
но поскольку lightdm уже запущен, я не думаю, что это должно быть проблемой.
Systemd - это версия 208, работающая на Fedora 20.
Согласно Майклу Хэмптону и некоторому полу-подтверждающему просмотру списка рассылки systemd-devel, похоже, вы не можете использовать sd_notify (& Type = notify) с традиционными демонами fork () ed. Итак, я сделал сервис старым-добрым Type = forking и попросил дочернего элемента сообщить родителю через общий канал, когда дочерний элемент был готов, после чего родительский элемент завершает работу, что, в свою очередь, позволяет systemd узнать, что служба ГОТОВА.
FWIW, наша попытка остановить зависимую службу (диспетчер входа в систему) на пару секунд не удалась, systemd ждал <1 секунды перед ее запуском.