服务经理 (Shepherd 是由 GNU Guix 系统发行版的开发者开发的,作为 SysV-init 初始化系统的替代方案。Shepherd 控制守护进程和实用程序均使用 Guile(Scheme 语言的一种实现)编写,Guile 也用于定义服务设置和启动参数。Shepherd 已在 GuixSD GNU 发行版中使用。Linux 它也旨在用于 GNU/Hurd,但可以在任何支持 Guile 语言的 POSIX 兼容操作系统上运行。
Shepherd 既可以用作主初始化系统(PID 为 1 的 init),也可以以单独的形式管理各个用户的后台进程(例如,运行 tor、privoxy、mcron 等),并以以下权限执行:这些用户。 Shepherd 通过考虑服务之间的关系,动态识别和启动所选服务所依赖的服务来完成启动和停止服务的工作。 Shepherd 还支持检测服务之间的冲突并防止它们同时运行。
主要创新:
- make-kill-destructor实现杀死一组进程;
- 新增参数default-pid-file-timeout,决定创建PID文件的等待时间;
- 如果超时内没有出现PID文件,则终止整个进程组(决定 留下没有 PID 文件的工作进程);
- “make-forkexec-constructor”添加“#:file-creation-mask”参数,实现日志文件创建并停止支持旧的调用约定;
- 解决了在没有prctl的系统上编译的问题,例如GNU/Hurd;
- 修复了导致每秒发送 SIGALRM 的问题。
来源: opennet.ru
