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 | /var/lib/<appid> /var/log/<appid> | ✅ 是 | 显式声明可写路径 |
LimitNOFILE | 65536 | 建议 | 文件描述符限制 |
StartLimitBurst | 5 | 建议 | 间隔内最大重启次数 |
StartLimitIntervalSec | 60 | 建议 | 重启限制间隔(秒) |
重要
服务单元配置文件禁止配置 Restart 和 RestartSec 参数。应用的启动、停止和重启生命周期由 TOS 应用中心统一管理,开发者配置的自动重启策略可能与平台管理逻辑冲突,导致应用状态不一致。StartLimitBurst 和 StartLimitIntervalSec 保留不受影响。