OS
Linux
Alpine 管理服务

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)