Alpine Linux 使用 OpenRC
来管理服务。OpenRC 是一个轻量级 init
系统(对比 Systemd 进程管理器 ),不需要对传统的类 Unix 系统做大型修改,就可以集成系统软件组成模块化、可伸缩的系统。OpenRC 是一个快速、轻量级、容易配置以及修改的系统,只需要非常基本的依赖就可以运行在核心系统组件上。
https://wiki.gentoo.org/wiki/OpenRC (opens in a new tab)
https://wiki.gentoo.org/wiki/OpenRC/supervise-daemon (opens in a new tab)
https://manpages.debian.org/testing/openrc/openrc-run.8.en.html (opens in a new tab)
安装
docker Alpine 镜像中可能会没有安装 OpenRC
,需要手动安装。
apk add openrc --no-cache
创建服务
创建 Alpine 服务与 Systemd 的方式类似,需要创建一个服务脚本,然后将其放置在 /etc/init.d/
目录下。然后给予执行权限。
这里给出一个示例,更多命令参考 OpenRC Service Script Writing Guide (opens in a new tab)
#!/sbin/openrc-run
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
CONFIG_PATH="/etc/xxx/config.json"
PIDFILE_PATH="/run/xxx.pid"
LOG_PATH="/var/log/xxx.log"
depend() {
need net
}
checkconfig() {
if [ ! -f ${CONFIG_PATH} ]; then
ewarn "${CONFIG_PATH} does not exist."
fi
}
start() {
checkconfig || return 1
ebegin "Starting xxx"
ebegin "Log File : ${LOG_PATH}"
start-stop-daemon --start \
-b -1 ${LOG_PATH} -2 ${LOG_PATH} \
-m -p ${PIDFILE_PATH} \
--exec /etc/xxx/xxx run -- -c ${CONFIG_PATH}
eend $?
}
stop() {
ebegin "Stopping xxx"
start-stop-daemon --stop -p ${PIDFILE_PATH}
eend $?
}
常用参数
参数 | 说明 |
---|---|
-x, --exec daemon | 指定要执行的进程脚本 |
-b, --background | 后台运行 |
-m, --make-pidfile | 这个一般和-b 配合,创建 PID 文件 |
-p, --pidfile file | 指定 PID 文件,stop,status 之类的命令都会用到 |
-n, --name | 如果没有指定 pid 文件,那么就要通过指定 name 来停止进程了 |
-w, --wait milliseconds | 进程启动后,有这个参数会等待几毫秒来检测进程是否仍然存活 |
-1, --stdout file | 指定标准输出文件 |
-2, --stderr file | 指定标准错误文件 |
-u, --user user[:group] | 指定运行用户 |
-d, --chdir directory | 指定工作目录 |
守护进程
https://wiki.gentoo.org/wiki/OpenRC/supervise-daemon (opens in a new tab)