systemd 系统服务

更新于 2026-09-29在 GitHub 上编辑

发行包自带的 start-daemon.sh / start-web.sh 是前台进程脚本:终端一关,进程就结束。要把 ElementsPanel 常驻运行,用 systemd 托管这两个进程。

本页以 Linux + systemd 为例,发行目录假设为 /opt/elementspanel(内含 web/ 与 daemon/)。其他系统(OpenRC、FreeBSD 等)思路相同,只是服务定义文件格式不同。

准备

# 发行包解压到 /opt/elementspanel,并安装运行依赖
cd /opt/elementspanel
./install.sh

install.sh 分别在 web/ 与 daemon/ 下执行 npm install --production。之后就可以用 systemd 启动 app.js。

节点服务

创建 /etc/systemd/system/elementspanel-daemon.service:

[Unit]
Description=ElementsPanel Daemon
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/elementspanel/daemon
ExecStart=/usr/bin/node --max-old-space-size=8192 --enable-source-maps app.js
Restart=on-failure
RestartSec=5
# 建议使用一个专用用户,而不是 root
User=elementspanel
Group=elementspanel

[Install]
WantedBy=multi-user.target

面板服务

创建 /etc/systemd/system/elementspanel-web.service:

[Unit]
Description=ElementsPanel Web
After=network.target
# 面板通常先于节点启动也无妨,这里只是表达依赖关系
Wants=elementspanel-daemon.service

[Service]
Type=simple
WorkingDirectory=/opt/elementspanel/web
ExecStart=/usr/bin/node --max-old-space-size=8192 --enable-source-maps app.js
Restart=on-failure
RestartSec=5
User=elementspanel
Group=elementspanel

[Install]
WantedBy=multi-user.target
Tip
--max-old-space-size=8192 是发行脚本自带的堆上限,可按机器内存调整。--enable-source-maps 让日志里的堆栈指向原始 TypeScript 行号。

启用与启动

sudo systemctl daemon-reload

# 先节点、后面板
sudo systemctl enable --now elementspanel-daemon.service
sudo systemctl enable --now elementspanel-web.service

# 查看状态与日志
systemctl status elementspanel-web.service
journalctl -u elementspanel-web.service -f
journalctl -u elementspanel-daemon.service -f

重启、停止、禁用:

sudo systemctl restart elementspanel-web.service
sudo systemctl stop elementspanel-web.service
sudo systemctl disable elementspanel-web.service

单独重启某一个进程可以热修复对应部分的问题:面板负责用户与网页,节点负责进程与容器,两者互不依赖对方的运行时状态。

更新流程

sudo systemctl stop elementspanel-web.service elementspanel-daemon.service
# 替换程序文件,保留 data/ 与 logs/
sudo systemctl start elementspanel-daemon.service elementspanel-web.service

权限与文件

以非 root 用户运行时,注意该用户要能:

  • 读写 /opt/elementspanel 下的 data/、logs/;

  • 若要运行 Docker 实例,能访问 Docker(加入 docker 组或配置 rootless Docker);

  • 有权限在实例目录中读写与执行服务端程序。

若实例以 Docker 运行,节点通常是唯一需要 Docker 权限的进程;面板不需要。