systemd 单元
docdoc service --config <path> install 生成 /etc/systemd/system/docdoc.service,install 时探测全局安装的 docdoc 可执行文件绝对路径与配置文件绝对路径,并固化进单元:
[Unit]
Description=docdoc documentation server
After=network.target
[Service]
Environment=UV_USE_IO_URING=0
ExecStart=<docdoc 绝对路径> serve --config <配置文件绝对路径>
Restart=on-failure
User=<执行 install 的用户>
[Install]
WantedBy=multi-user.target
Environment=UV_USE_IO_URING=0:libuv ≤1.49(Node 20 / 早期 Node 22)时禁用其 io_uring epoll 批处理,规避进程退出路径的偶发 SIGABRT;libuv ≥1.50 起该路径无条件启用、开关无效,此时依赖两层自愈:CLI 包 bin/docdoc shell 启动器在每次调用前剥离 pm2 fork 终端泄漏的 NODE_CHANNEL_FD / NODE_CHANNEL_SERIALIZATION_MODE(取证命中的环境因素;单元 ExecStart 虽直指 node 与 dist/index.js,但 systemd 环境本无这些变量),install.sh 顶部另有同名 unset 作为安装时刻的双保险,node 系命令不因异常退出而重跑并按实际产物校验(CLI 版本、单元文件存在),服务重启与 enable/daemon-reload 均不经 CLI、直接调用原生 systemctl(非 Node 进程);service install(写单元文件)仍经 CLI——单元 ExecStart 指向 pnpm shim 稳定路径(非内容哈希目录),升级后即使单元未重写,重启同样切入新版本。
命令映射
| CLI 命令 | systemd 行为 |
|---|---|
docdoc service install |
写入单元文件、daemon-reload、enable |
docdoc service start |
systemctl start docdoc |
docdoc service stop |
systemctl stop docdoc |
