s6
- s6
- skarnet/s6
- just-containers/s6-overlay - s6 overlay for containers (includes execline, s6-linux-utils & a custom init)
- Why another supervision suite ?
- 其他模块
- s6-linux-init init
- s6-rc 服务依赖管理
- gentoo wiki S6
- s6-supervise
- 实现 supervisor 功能
- 接收 servicedir 作为参数
- s6-svscan
- 监视一组进程
- 接收 scandir 作为参数
- 2.3 之前默认每 5s 会扫描一次 - 之后需要通过
-t ms
指定 - SIGALARM 触发扫描 - 可通过 s6-svscanctl 控制
- 针对每个扫描到的
servicedir
启动 s6-supervise - 控制文件位于
.s6-svscan
- s6-log
- 日志工具
s6-log '!processor-script arg1 arg2' ./dirname
等同于调用execlineb -Pc 'processor-script arg1 arg2'
- servicedir - 服务目录 - 表示定义的一个服务 - 除了 run 脚本其他存在可选
- run - 启动脚本
- down - 停止脚本
- log - 子目录或符号链接
- finish - 每次进程结束后的清理工作
- 接受两个参数: exitCode 或 256 表示信号, 信号
- timeout-finish - 运行超时回调 - 接受一个参数: 运行时间毫秒 - 默认 5s 超时
- nosetsid - 不调用 setsid - 子线程会运行在 s6-supervise 的会话
- scandir
- 不推荐将服务仓库作为扫描目录
- 一般在扫描目录下进行软链接
# services 服务仓库
# run 运行服务目录
mkdir services run
# 启动 - 每 10s 扫描一次
s6-svscan $PWD/run -t 10000
# 定义一个服务
# ====================
install -Dv /dev/null services/ncat-echo/run
cat <<SH >services/ncat-echo/run
#!/usr/bin/env execlineb -P
ncat -e /bin/cat -k -l 8080
SH
# 启动服务
ln -s ../services/ncat-echo run/
s6-svscanctl -a run
# 服务状态
s6-svstat services/ncat-echo
s6-svstat -o up,wantedup,normallyup,ready,paused,pid,exitcode,signal,signum,updownsince,readysince,updownfor,readyfor services/ncat-echo
# 停止服务
s6-svc -dx services/ncat-echo
unlink run/ncat-echo
# 常用脚本
# ====================
# 所有服务状态
for svc in services/*; do echo -n $(basename $svc)' ';s6-svok $svc && echo ok || echo down;done