在无 systemd 的 Linux 环境中管理后台进程

在某算力平台里,实例是使用虚拟化容器的方式启动的,而不是虚拟机,也就是说 PID 1 的进程并不是 systemd,因此无法使用 systemd 来管理后台进程,于是考虑使用 process-compose 来管理。

process-compose 使用类似 docker-compose 的配置文件管理后台进程,还支持在 TUI 中查看进程日志,非常方便。本文后面还会使用 beszel 作为实例演示 process-compose 的使用方法。

安装

推荐使用 mise 完成安装,参考 mise:一个更灵活的包管理工具,附常见工具推荐 - process-compose。

也可以根据官方文档,使用以下命令安装:

sh -c "$(curl --location https://raw.githubusercontent.com/F1bonacc1/process-compose/main/scripts/get-pc.sh)" -- -d -b ~/.local/bin

可执行将安装到 ~/.local/bin/process-compose 。

初始化

修改 ~/.bashrc ,追加以下内容:

pc() {
    local hash port
    hash=$(printf '%s' "$PWD" | sha256sum | cut -c1-8)
    port=$((20000 + 16#$hash % 40000))
    process-compose -p "$port" "$@"
}

这样能较为方便的使用 up、attach 等命令。

使用

beszel

此小节我们用 beszel 实践 process-compose 的使用,beszel 的安装可参考 mise:一个更灵活的包管理工具,附常见工具推荐 - baszel。

新建文件夹 ~/.config/process-compose/baszel 并进入:

mkdir -p ~/.config/process-compose/baszel
cd ~/.config/process-compose/baszel

编辑文件 ./compose.yaml:

version: "0.5"

processes:
  beszel-hub:
    command: "beszel serve --http 0.0.0.0:8090"
    environment:
      - "APP_URL=http://localhost:8090"
    availability:
      restart: always
      backoff_seconds: 5
  beszel-agent:
    command: "beszel-agent"
    environment:
      - "USE_CGROUP=true"
      - "KEY=ssh-ed25519 xxx"
      - "TOKEN=xxx"
      - "URL=http://localhost:8090"
    availability:
      restart: on_failure
      backoff_seconds: 5

启动项目:

pc up -D

在算力平台上暴露端口 8090,访问 http://xxx:8090 ,默认账号 beszel 、默认密码 beszel-admin。登录后,点击右上角“添加系统”,弹出如图界面:

名称可自定义,主机/IP 填写 localhost,填写完成后点击“添加 系统”。

修改文件 ./compose.yaml,将刚刚弹窗中的公钥和令牌填入文件中:

...
      backoff_seconds: 5
  beszel-agent:
    command: "beszel-agent"
    environment:
      - "USE_CGROUP=true"
      - "KEY=ssh-ed25519 xxx" # 公钥填这里
      - "TOKEN=xxx" # 令牌填这里
      - "URL=http://localhost:8090"
...

应用更改:

pc project update -f compose.yaml

刷新网页,应该就能看到信息更新了。

上述配置文件中 USE_CGROUP=true 的作用为监控容器内的 CPU 和内存资源,但截止撰写本文时 beszel 最新版本为 v0.21.0,该版本尚未支持,预计下个版本将支持。在下一个版本更新前,网页上监控的资源将是整台物理机的资源,而不是容器内实际能使用的资源。