Systemd 服务规范
服务单元 ID 来自 config.ini.system_id:
{
"system_id": "<system_id>"
}
最终系统服务必须是:
<system_id>.service
应用安装目录内保留:
/usr/local/<app_id>/init.d/<system_id>.service
标准服务文件:
标准服务文件(含安全加固):
[Unit]
Description=<service_description>
After=network.target
StartLimitBurst=5
StartLimitIntervalSec=60
[Service]
Type=simple
User=<appid>
Group=<appid>
WorkingDirectory=/usr/local/<appid>
ExecStart=/usr/local/<appid>/bin/<binary_name>
EnvironmentFile=/usr/local/<appid>/<appid>.env
TimeoutStartSec=30
TimeoutStopSec=10
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/<appid> /var/log/<appid>
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
Systemd 指令参考:
| 指令 | 值 | 是否必填 | 说明 |
|---|---|---|---|
User | <appid> | ✅ 是 | 以专用非 root 用户运行服务 |
Group | <appid> | ✅ 是 | 以专用组运行服务 |
WorkingDirectory | /usr/local/<appid> | ✅ 是 | 服务的工作目录 |
NoNewPrivileges | true | ✅ 是 | 阻止权限提升 |
ProtectSystem | strict | ✅ 是 | 将 /usr、/boot、/etc 挂载为只读 |
ProtectHome | true | ✅ 是 | 隐藏 /home 目录 |
TimeoutStartSec | 30 | ✅ 是 | 服务启动超时(秒) |
TimeoutStopSec | 10 | ✅ 是 | 优雅停止超时(秒) |
AmbientCapabilities | CAP_NET_BIND_SERVICE | 条件 | 仅在绑定 1024 以下端口时需要 |
ReadWritePaths | /usr/local/<appid>/data /usr/local/<appid>/logs | ✅ 是 | 显式声明可写路径(应用自身的数据目录和日志目录) |
LimitNOFILE | 65536 | 建议 | 文件描述符限制 |
StartLimitBurst | 5 | 可选 | 间隔内最大重启尝试次数(按需设置) |
StartLimitIntervalSec | 60 | 可选 | 重启限制间隔(秒,按需设置) |
Restart | on-failure | 可选 | 何时重启服务(如 always、on-failure、no)。应用中心会按此处定义的重启策略执行 |
RestartSec | 10 | 可选 | 重启服务前的等待时间(秒) |
说明
开发者可根据应用需要,在服务文件中配置 Restart= 和 RestartSec=,应用中心将按开发者定义的重启策略执行。为防止崩溃循环,请按需配置 StartLimitBurst= 和 StartLimitIntervalSec=。