#文件描述符 #systemd #linux # #API绑定 #接受 #辅助

sd-listen-fds

从systemd接收文件描述符的最小、纯Rust辅助工具

2个不稳定版本

0.2.0 2023年8月27日
0.1.0 2023年7月31日

#767 in Unix APIs

Download history 413/week @ 2024-03-13 761/week @ 2024-03-20 635/week @ 2024-03-27 767/week @ 2024-04-03 878/week @ 2024-04-10 680/week @ 2024-04-17 849/week @ 2024-04-24 886/week @ 2024-05-01 762/week @ 2024-05-08 749/week @ 2024-05-15 229/week @ 2024-05-22 215/week @ 2024-05-29 113/week @ 2024-06-05 165/week @ 2024-06-12 126/week @ 2024-06-19 126/week @ 2024-06-26

592 monthly downloads

MIT/Apache

8KB
114 代码行数,不包括注释

sd-listen-fds

Documentation License: Apache 2.0 License: MIT

暴露systemd、Linux init守护进程传入的文件描述符,无依赖,既不是国外的也不是其他。使纯Rust中实现socket激活服务变得简单。

与自行打开套接字的服务不同,socket激活服务是按需启动的,可以与其依赖项同时启动,并且可以在不丢失入站数据的情况下重启。可移植应用程序可以调用 sd_listen_fds::get() 并打开自己的套接字,如果成功并且返回空 Vec

还可以参考由外部 libsystemd 库暴露的 sd_listen_fds API。与使用 libsystemd 绑定相比,这个crate更小、更安全,并且可以在任何地方构建。

示例

let fds = sd_listen_fds::get().unwrap();
let (_name, fd) = fds
    .into_iter()
    .next()
    .expect("must be launched as a systemd socket-activated service");
let socket = TcpListener::from(fd);

my-service.socket(另见 systemd.socket

[Socket]
# TCP port number. Other types of sockets are also possible.
ListenStream=1234

[Install]
WantedBy=sockets.target

[Unit]
Description=My Rust service
Documentation=https://example.com/my-service/

my-service.service(另见 systemd.service

[Service]
ExecStart=/path/to/my-service

[Unit]
Requires=my-service.socket
Description=My Rust service
Documentation=https://example.com/my-service/

许可证

根据以下任一许可证授权

任选其一。

贡献

除非你明确声明,否则根据Apache-2.0许可证定义,你有意提交给作品的所有贡献,将如上所述双重授权,没有任何额外的条款或条件。

无运行时依赖