12 个版本
0.5.1 | 2021年10月26日 |
---|---|
0.5.0 | 2021年1月15日 |
0.4.0 | 2020年10月20日 |
0.3.1 | 2020年7月20日 |
0.1.1 | 2018年10月18日 |
#920 in Unix API
50 每月下载量
在 spirit 中使用
315KB
3.5K SLoC
Spirit-daemonize
将守护进程化集成到 spirit 配置框架中的助手和配置片段。
许可证
许可协议为以下之一
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选其一。
贡献
除非您明确表示,否则根据 Apache-2.0 许可协议定义的,您有意提交的任何贡献,均应双重许可,如上所述,不附加任何额外条款或条件。
lib.rs
:
Spirit 的守护进程化扩展。
这里的配置扩展了 spirit
配置框架,根据用户的配置和命令行选项自动进入后台。
示例
use serde::Deserialize;
use spirit::Spirit;
use spirit::prelude::*;
use spirit_daemonize::{Daemon, Opts as DaemonOpts};
use structopt::StructOpt;
// From config files
#[derive(Default, Deserialize)]
struct Cfg {
#[serde(default)]
daemon: Daemon,
}
// From command line
#[derive(Debug, StructOpt)]
struct Opts {
#[structopt(flatten)]
daemon: DaemonOpts,
}
fn main() {
Spirit::<Opts, Cfg>::new()
.with(unsafe {
spirit_daemonize::extension(|c: &Cfg, o: &Opts| {
(c.daemon.clone(), o.daemon.clone())
})
})
.run(|_spirit| {
// Possibly daemonized program goes here
Ok(())
});
}
添加选项
上面的程序获取了 -d
命令行选项,启用守护进程化。此外,配置现在可以理解一个新的 daemon
部分,包含以下选项
user
: 要成为的用户。可以是数字 ID 或名称。如果不存在,则不会更改用户。group
: 与用户类似,但针对组。pid-file
: 启动时写入的 pid 文件。如果不存在,则不存储任何内容。workdir
: 将切换到的当前工作目录。如果没有设置,则默认为/
。daemonize
:是否应该进入后台?如果与Opts
结合使用,则可以在命令行中覆盖。
多线程应用程序
由于是通过fork
来实现守护进程化,你应该在初始化spirit
之后开始任何线程。否则,你会丢失线程(并可能发生其他更糟糕的事情)。
守护进程化发生在validator actions的应用程序中,这是由config_validator
回调完成的。如果其他配置验证器需要启动任何线程,它们应该在守护进程化回调之后连接。然而,更安全的选项是在run
方法中启动它们。
依赖项
~6.5MB
~128K SLoC