gpt4 book ai didi

c - systemd 如何向服务发送消息以引发 sd_notify(3) 响应?

转载 作者:行者123 更新时间:2023-11-30 14:40:00 27 4
gpt4 key购买 nike

我无法理解 Systemd 的通知模型和一些工作流程。 Systemd 通知使用 sd_notify (3) 发生界面。 sd_notify (3) 接口(interface)为守护进程提供了一种告知 systemd 其状态的方法:

#include <systemd/sd-daemon.h>

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

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

...

如果我正确解析手册页,守护进程在启动并准备好处理数据后应调用 sd_notify(0, "READY=1\n");。当它停止时,它应该调用 sd_notify(0, "STOPPING=1\n");

这是我遇到问题的工作流程之一。我不明白 Systemd 如何向守护进程传递一条消息,说“更新您的状态”,以便可以通过 systemctl status 将其报告给用户。

systemctl status mydaemon.service

我遇到问题的另一个工作流程是关闭。我不明白 Systemd 如何向守护进程传递关闭消息。

在这两种情况下,我觉得我的可执行文件应该导出一个函数,而 Systemd 应该调用它来进行查询和消息。

Systemd 如何告诉守护进程报告其状态或关闭?

最佳答案

一般来说,systemd 不会向您的守护进程发送消息。您的守护进程应该在每次内部状态发生变化时生成状态通知。否则,如果您的进程挂起(暂时或永久),用户的状态请求将不会执行任何操作。请注意,还会显示守护程序的输出,因此可能不必始终调用 sd_notify

停止通常应通过信号来处理,或者可能使用 ExecStop= 来运行 fooctl 进程,该进程通过套接字发送消息并等待回复。

关于c - systemd 如何向服务发送消息以引发 sd_notify(3) 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55754989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com