From e5761bd828fa8fd13ae290bf1b93af54ae61560a Mon Sep 17 00:00:00 2001 From: wangyunlong <3080433063@qq.com> Date: Wed, 14 Oct 2026 18:40:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(deploy):=20Windows=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=87=AA=E5=90=AF=E8=84=9A=E6=9C=AC=E4=B8=8E?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=89=8B=E5=86=8C=E8=A1=A5=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit autologon.ps1 交互输密码启用/撤销 AutoAdminLogon(DefaultPassword 仅 Administrators 可读),补齐「开机自动登录 → Startup keepalive → 控制台+ 调度器」自启链唯一缺口;采集依赖 CDP 交互会话,不能用服务/SYSTEM 任务 替代。runbook 增补开机自启与重启验收章节。 --- deploy/watchdog/autologon.ps1 | 47 +++++++++++++++++++++++++++++++++++ docs/runbook.md | 13 ++++++++++ 2 files changed, 60 insertions(+) create mode 100644 deploy/watchdog/autologon.ps1 diff --git a/deploy/watchdog/autologon.ps1 b/deploy/watchdog/autologon.ps1 new file mode 100644 index 0000000..ab8c9c5 --- /dev/null +++ b/deploy/watchdog/autologon.ps1 @@ -0,0 +1,47 @@ +# GYXX Flow 开机自启:启用/关闭 Windows 自动登录 +# +# 背景:控制台+调度器的自启链是 +# 开机 → 自动登录进桌面 → Startup\gyxx-keepalive.vbs → keepalive → 控制台(8765)+调度器 +# 唯一缺口是 AutoAdminLogon(默认 0,重启后停在登录界面,Startup 不触发)。 +# 采集依赖浏览器 CDP,必须跑在交互式用户会话,因此不能用服务/Task Scheduler SYSTEM 替代。 +# +# 启用(交互输入密码,不会留在命令历史): +# powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 +# 撤销: +# powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 -Disable +# +# 注意:DefaultPassword 以明文存于 HKLM Winlogon(仅 Administrators 可读), +# 内网采集机可接受;介意安全性请改用 Sysinternals Autologon.exe(LSA secret 存储)。 +param( + [switch]$Disable +) + +$winlogon = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' + +if ($Disable) { + Set-ItemProperty $winlogon -Name AutoAdminLogon -Value '0' + Remove-ItemProperty $winlogon -Name DefaultPassword -ErrorAction SilentlyContinue + Write-Host '已关闭自动登录(DefaultPassword 已清除)。' -ForegroundColor Yellow + exit 0 +} + +$pwd1 = Read-Host -AsSecureString "输入 $env:USERNAME 的 Windows 登录密码" +$pwd2 = Read-Host -AsSecureString '再输一次确认' +$plain1 = [Net.NetworkCredential]::new('', $pwd1).Password +$plain2 = [Net.NetworkCredential]::new('', $pwd2).Password +if ($plain1 -ne $plain2) { throw '两次输入不一致,未做任何修改。' } +if ([string]::IsNullOrEmpty($plain1)) { + Write-Warning '密码为空:策略 LimitBlankPasswordUse=1 会拒绝空密码自动登录,请先给账户设置密码。' + exit 1 +} + +Set-ItemProperty $winlogon -Name AutoAdminLogon -Value '1' +Set-ItemProperty $winlogon -Name DefaultUserName -Value $env:USERNAME +Set-ItemProperty $winlogon -Name DefaultDomainName -Value $env:COMPUTERNAME +Set-ItemProperty $winlogon -Name DefaultPassword -Value $plain1 +# AutoLogonCount 每次自动登录会递减,删掉表示不限次数 +Remove-ItemProperty $winlogon -Name AutoLogonCount -ErrorAction SilentlyContinue + +Write-Host '自动登录已启用。' -ForegroundColor Green +Write-Host '验证方式:挑空闲时间重启一次,开机应自动进桌面,约 2 分钟内控制台(127.0.0.1:8765)与调度器就位;' +Write-Host '也可查看 D:\gyxx-flow\var\logs\keepalive\keepalive.log 出现 keepalive-start / scheduler-restarted / console-restarted。' diff --git a/docs/runbook.md b/docs/runbook.md index 84ea4dc..3879bbb 100644 --- a/docs/runbook.md +++ b/docs/runbook.md @@ -161,6 +161,19 @@ uv run gyxx schedule run --env-file /etc/gyxx-flow/gyxx-flow.env 需要停用单个工作流时,优先修改该工作流的调度启用状态,先 dry-run,再重启服务。其他模块继续运行。 +### 开机自启(Windows 生产机) + +重启/关机开机后的自动恢复链路:**Windows 自动登录 → `Startup\gyxx-keepalive.vbs` → `deploy/watchdog/gyxx_keepalive.py` → 控制台(8765) + `gyxx schedule run` 调度器**。keepalive 每 30 秒巡检并负责拉起死掉的控制台/调度器(单实例锁防双跑,冷却 120s、熔断保护),日志在 `var/logs/keepalive/keepalive.log`,验收用 `python deploy/watchdog/gyxx_keepalive.py --once`。 + +采集依赖浏览器 CDP,必须运行在交互式用户会话中,因此不能改成 Windows 服务或 Task Scheduler SYSTEM 任务(也不允许注册 Windows 任务计划)。免登录自启的唯一环节是自动登录,用脚本启用(密码交互输入、写入 `HKLM\...\Winlogon`,仅 Administrators 可读): + +```powershell +powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 # 启用 +powershell -ExecutionPolicy Bypass -File D:\gyxx-flow\deploy\watchdog\autologon.ps1 -Disable # 撤销 +``` + +启用后重启验证:开机自动进桌面,约 2 分钟内控制台与调度器就位;停机窗内到期任务由调度器 catch-up 自动补跑。 + ## 数据和浏览器状态 生产 `GYXX_DATA_ROOT` 必须位于源码目录之外,Linux 推荐 `/var/lib/gyxx-flow`: