Skip to main content
Version: TOS 7

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>✅ 是服务的工作目录
NoNewPrivilegestrue✅ 是阻止权限提升
ProtectSystemstrict✅ 是将 /usr、/boot、/etc 挂载为只读
ProtectHometrue✅ 是隐藏 /home 目录
TimeoutStartSec30✅ 是服务启动超时(秒)
TimeoutStopSec10✅ 是优雅停止超时(秒)
AmbientCapabilitiesCAP_NET_BIND_SERVICE条件仅在绑定 1024 以下端口时需要
ReadWritePaths/usr/local/<appid>/data /usr/local/<appid>/logs✅ 是显式声明可写路径(应用自身的数据目录和日志目录)
LimitNOFILE65536建议文件描述符限制
StartLimitBurst5可选间隔内最大重启尝试次数(按需设置)
StartLimitIntervalSec60可选重启限制间隔(秒,按需设置)
Restarton-failure可选何时重启服务(如 always、on-failure、no)。应用中心会按此处定义的重启策略执行
RestartSec10可选重启服务前的等待时间(秒)
说明

开发者可根据应用需要,在服务文件中配置 Restart= 和 RestartSec=,应用中心将按开发者定义的重启策略执行。为防止崩溃循环,请按需配置 StartLimitBurst= 和 StartLimitIntervalSec=。