一 软件简介
s6-svscan 是一款类似于supervisord 的 Linux 程序管理软件,能够实现对程序进程的健康监控和主动重启等操作。
考虑到 supervisord 默认不回显程序打印日志,这给 docker 的日志管理带来了麻烦,
故本文采用 s6-svscan 代替 supervisord 进行程序管理。
二 使用方法
2.1 软件下载
首先需要下载 s6 suite 软件 s6-overlay-amd64.tar.gz,
下载地址 :https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz
2.2 将 s6 软件打包到 docker 镜像
即解压覆盖 /usr 目录即可
Dockerfile 关键代码:ADD s6-overlay-amd64.tar.gz /usr/
2.3 编写服务启动脚本
每个服务程序单独创建一个目录,内置一个名称为 run 的脚本和一个名称为 finish 的脚本,
run 负责启动程序,finish 执行程序退出后的操作,run 脚本应该是长时运行的。
例如,我的服务路径分布为:
/service
/app1
/run
/finish
/app2
/run
/finish
2.4 设置容器启动时执行 s6 启动相关服务
启动命令很简单,传入服务脚本所在路径即可,这里即为 /usr/bin/s6-svscan /service
Dockerfile 关键代码:CMD ["/usr/bin/s6-svscan", "/service"]
这样,容器启动时就会扫描 /service 文件夹,执行对应的 run 脚本,当 run 脚本意外退出时,s6 会自动重启。
2.5 一个 s6 运行示例截图
2.6 日志显示情况
2.7 备注说明
如果某个服务暂时不想通过 s6 自动启动,可以在其服务脚本文件夹内(与 run 同路径)放置一个名称为 down 的文件,
这样 s6 就不会执行对应的 run 脚本了。