OPERATIONS / WINDOWS SERVICE

一个平台服务,多个业务进程

平台注册为 Windows 服务后,开机后台运行,自动加载已登记的工单、费用报销和请假等模块。模块仍由平台通过 go-plugin 启动,不需要分别注册 Windows 服务。网页访问地址及账号权限保持不变。

1. 安装与启动

将完整运行包放在固定目录,在该目录打开管理员终端执行:

.\platform.exe service install
.\platform.exe service start
.\platform.exe service status

默认服务名 CollabPlatform,延迟自动启动,使用 LocalService 账号。安装命令为该服务的专属 SID 授予 data/、logs/ 修改权限,modules/ 读取执行权限和平台 EXE 读取执行权限,不授予管理员权限。安装不会自动启动;start 负责启动。

已有控制台平台占用相同端口或数据目录时,先关闭控制台平台。安装前备份 data/;不要同时运行控制台版和服务版共享一个数据目录。网页首次运行仍按原有规则初始化管理员;已有账号与密码不会因为服务安装而重置。

2. 常用命令

.\platform.exe service status
.\platform.exe service stop
.\platform.exe service start
.\platform.exe service restart
.\platform.exe service uninstall

停止会先排空 HTTP 请求,再关闭模块进程。卸载会先停止服务,再移除服务登记;保留数据、模块、日志及专属 SID 的文件权限条目。若还要继续使用控制台运行,直接执行 platform.exe。停止平台注册服务后,Windows 不会把正常停止当成故障重启。

3. 自定义目录和服务名

.\platform.exe service install -service-name CollabPlatformDemo -addr 127.0.0.1:17881 -data-dir D:\CollabData -module-dir D:\CollabModules -log-dir D:\CollabLogs
.\platform.exe service start -service-name CollabPlatformDemo
.\platform.exe service status -service-name CollabPlatformDemo

安装时将绝对路径写入服务配置,避免系统服务工作目录影响数据定位。安装后不能直接移动 EXE;需要先停止、卸载,再从新位置安装,并继续指定原数据目录。控制命令会核对服务所属 EXE,拒绝操作其他程序的服务。

4. 日志与排错

默认 logs/platform.log 包含平台及模块通信日志,单文件约 5 MiB,保留 3 个历史文件。可用 -log-dir 指定目录。当前服务账号必须有权读取模块包,数据与日志目录必须可写。状态命令以 JSON 输出进程 ID、账号、启动方式和 EXE 路径。

无法启动时先查日志、端口占用及数据目录锁,再查 Windows 事件查看器。模块状态失败不一定代表平台服务失败:平台可以保持运行供管理员修复模块。

5. 两层故障恢复

故障行为
模块意外退出或 RPC 失败平台检测后以约 1、2、4 秒退避,最多自动尝试 3 次;达到上限后等待管理员点击启动。持续稳定运行 10 分钟后清除重试计数。
管理员停止模块本次平台运行期间保持停止;平台下次启动会加载仍已登记的模块。取消注册才会阻止下次加载。
平台服务意外退出Windows 服务恢复策略依次等待 5、15、60 秒重启;之后不再自动重试,稳定计数按系统的 1 小时重置规则处理。
平台进程被终止Windows Job Object 清理平台拥有的模块进程,避免残留进程占用端口。
正常停止或关机收到服务停止 / 关机信号,排空请求并清理模块。下次开机按自动启动配置恢复。

重启会使浏览器登录会话失效,需要重新登录;业务数据、账号及模块登记保留。故障发生前未确认的写请求,仍应使用原请求号查询或幂等重试。

6. 更新与验证

更新前停止服务、备份完整 data/,再替换 EXE 和对应模块包并启动。服务模式不增加数据库迁移或无停机升级能力。不得覆盖现有业务库。运行包不包含当前演示库的工单、账号或密码数据。

源码提供 scripts/service_smoke_test.py,在临时服务与目录中验证安装、LocalService 运行、业务调用、模块故障恢复、主进程故障恢复、清理与卸载,不向现有业务库写入测试工单。开机自动启动配置已核对,测试不会为了验证而重启用户电脑。

Go Windows service API · 服务管理 API