代码之家  ›  专栏  ›  技术社区  ›  jww avp

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

  •  0
  • jww avp  · 技术社区  · 7 年前

    我很难理解Systemd的通知模型和一些工作流。使用 sd_notify (3) 接口。这个 SD U通知(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,
        ...);
    
    ...
    

    如果我正确地解析了手册页,守护进程应该调用 sd_notify(0, "READY=1\n"); 一旦启动并准备好处理数据。当它停下来的时候 sd_notify(0, "STOPPING=1\n"); .

    这是我遇到麻烦的工作流程之一。我不明白systemd是如何向守护进程传递消息的 “更新您的状态” 所以可以通过 systemctl status .

    systemctl status mydaemon.service
    

    另一个我遇到麻烦的工作流程是关闭。我不知道systemd如何向守护进程传递关闭消息。

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   o11c    7 年前

    一般来说,systemd 向守护进程发送消息。你的守护进程应该生成状态通知 每一个 内部状态更改的时间。否则,如果进程挂起(临时或永久),用户的状态请求将不会执行任何操作。注意,守护进程的输出也会显示出来,因此可能不需要总是调用 sd_notify .

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

    推荐文章