Как systemd отправляет сообщение службе для получения ответа sd_notify (3)? - PullRequest
0 голосов
/ 19 апреля 2019

У меня проблемы с пониманием модели Systemd для уведомлений и нескольких рабочих процессов.Системные уведомления происходят с использованием интерфейса sd_notify (3).Интерфейсы sd_notify (3) предоставляют демону возможность сообщить systemd о его состоянии:

#include <systemd/sd-daemon.h>

int sd_notify(int unset_environment,
    const char *state);

int sd_notifyf(int unset_environment,
    const char *format,
    ...);

...

Если я правильно разбираю man-страницу, демон должен вызвать sd_notify(0, "READY=1\n");, как только она запущена и готова к обработкеданные.И когда он останавливается, он должен вызвать sd_notify(0, "STOPPING=1\n");.

Вот один из рабочих процессов, с которыми у меня возникают проблемы.Я не вижу, как Systemd доставляет демону сообщение «1012 *« обновить ваш статус », чтобы об этом можно было сообщить пользователю через systemctl status.

systemctl status mydaemon.service

Другой рабочий процесс IУ меня проблемы с выключением.Я не понимаю, как Systemd доставляет демону сообщение о завершении работы.

В обоих случаях мне кажется, что мой исполняемый файл должен экспортировать функцию, а Systemd должен вызывать ее для запросов и сообщений.

Как Systemd сообщает демону о своем статусе или завершении работы?

1 Ответ

1 голос
/ 19 апреля 2019

Обычно systemd не отправляет сообщение вашему демону.Ваш демон должен генерировать уведомления о состоянии каждые при изменении внутреннего состояния.В противном случае, если ваш процесс завис (временно или постоянно), запрос пользователя на статус ничего не сделает.Обратите внимание, что выходные данные демона также отображаются, поэтому, возможно, нет необходимости всегда вызывать sd_notify.

Остановка должна обычно обрабатываться сигналом или, возможно, с использованием ExecStop= для запуска процесса fooctlкоторый отправляет сообщение через сокет и ожидает ответа.

...