佛系程序员
首页
栏目
标签
归档
关于
友链
佛系程序员
首页
栏目
标签
归档
友链
关于
opencode后台驻留开机自启连接telegram
学习笔记
网站开发
发布日期: 2026-06-06 12:26:10
喜欢量: 9 个
阅读次数:
58
这是一个 Windows 系统运维问题,不是编码任务,不需要加载 skill。 你需要的是 **后台驻留 + 开机自启**。Windows 上有三种做法,按推荐顺序: --- ## 方案一:NSSM 注册为 Windows 服务(推荐) NSSM 可以把任意命令行程序注册成 Windows 服务,后台静默运行、开机自启、崩溃自动重启。 **1. 下载 NSSM** ```powershell # 从 https://nssm.cc/download 下载,解压到 D:\nssm\nssm.exe ``` **2. 注册两个服务** ```powershell # 注册 opencode serve 服务 D:\nssm\nssm.exe install OpenCodeServe # 会弹出配置窗口: # Path: cmd.exe # Arguments: /c "cd /d E:\yiyi\wwwroot\python\novalayer && opencode serve" # Startup directory: E:\yiyi\wwwroot\python\novalayer # Service name: OpenCodeServe # 注册 opencode-telegram 服务 D:\nssm\nssm.exe install OpenCodeTelegram # 配置窗口: # Path: cmd.exe # Arguments: /c "cd /d E:\yiyi\wwwroot\python\novalayer && opencode-telegram start" # Startup directory: E:\yiyi\wwwroot\python\novalayer # Service name: OpenCodeTelegram ``` **3. 启动服务** ```powershell # 手动启动 Start-Service OpenCodeServe Start-Service OpenCodeTelegram # 设为自动启动(NSSM 默认就是自动) Set-Service OpenCodeServe -StartupType Automatic Set-Service OpenCodeTelegram -StartupType Automatic ``` **4. 管理命令** ```powershell # 停止 Stop-Service OpenCodeServe # 查看状态 Get-Service OpenCodeServe # 卸载 D:\nssm\nssm.exe remove OpenCodeServe confirm ``` **优点**:开机自启、无人登录也运行、崩溃自动重启、无终端窗口 **缺点**:需要下载一个几百KB的工具 --- ## 方案二:Windows Task Scheduler + 隐藏窗口 不想装任何第三方工具就用这个。 **创建两个任务脚本**(用管理员 PowerShell): ```powershell # 创建 opencode serve 计划任务 $action1 = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode serve" $trigger1 = New-ScheduledTaskTrigger -AtStartup $settings1 = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable Register-ScheduledTask -TaskName "OpenCodeServe" -Action $action1 -Trigger $trigger1 -Settings $settings1 -RunLevel Highest -User $env:USERNAME # 创建 opencode-telegram 计划任务 $action2 = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode-telegram start" $trigger2 = New-ScheduledTaskTrigger -AtStartup Register-ScheduledTask -TaskName "OpenCodeTelegram" -Action $action2 -Trigger $trigger2 -Settings $settings1 -RunLevel Highest -User $env:USERNAME ``` **缺点**:登录时才会启动(除非选"不管用户是否登录"但需要密码),会有终端窗口闪现 --- ## 方案三:快捷方式扔到启动文件夹(最简单) **最低成本**,但关了终端一样会退出(这是它的缺点)。 ```powershell # 创建两个启动脚本到 shell:startup $wsh = New-Object -ComObject WScript.Shell # opencode serve $shortcut1 = $wsh.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\OpenCodeServe.lnk") $shortcut1.TargetPath = "cmd.exe" $shortcut1.Arguments = "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode serve" $shortcut1.WindowStyle = 7 # 隐藏窗口 $shortcut1.Save() # opencode-telegram $shortcut2 = $wsh.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\OpenCodeTelegram.lnk") $shortcut2.TargetPath = "cmd.exe" $shortcut2.Arguments = "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode-telegram start" $shortcut2.WindowStyle = 7 $shortcut2.Save() ``` **缺点**:登录才启动,关了终端进程就死,`WindowStyle = 7` 不一定真隐藏 --- ## 我的推荐 **用 NSSM 方案一**。理由: - 终端关了也不影响(服务独立运行) - 开机自启,无需登录 - 进程挂了自动重启 - 没有窗口闪现 - 一个 `nssm.exe` 搞定,不用写脚本维护 ```powershell # 一键搞定两个服务(改完路径直接跑) D:\nssm\nssm.exe install OpenCodeServe "cmd.exe" "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode serve" D:\nssm\nssm.exe install OpenCodeTelegram "cmd.exe" "/c cd /d E:\yiyi\wwwroot\python\novalayer && opencode-telegram start" Start-Service OpenCodeServe Start-Service OpenCodeTelegram ``` 要不要我直接帮你写一个 `install-services.ps1` 脚本,放在项目里一键配置? 脚本已写好:`scripts\install-services.ps1` --- ## 操作步骤 **1. 以管理员身份打开 PowerShell** → 执行一次安装: ```powershell .\scripts\install-services.ps1 install ``` 脚本会自动:下载 NSSM → 注册两个服务 → 启动它们 → 设为开机自启 **2. 以后日常管理:** ```powershell .\scripts\install-services.ps1 status # 查看运行状态 .\scripts\install-services.ps1 restart # 重启 .\scripts\install-services.ps1 stop # 停止 .\scripts\install-services.ps1 uninstall # 卸载 ``` **3. 效果:** - ✅ 关闭终端 → 服务照跑 - ✅ 开机自启 → 不用手动启动 - ✅ 崩溃自动重启(5秒后) - ✅ 日志轮转(`logs/` 目录,每个文件10MB自动切割) - ❌ 不再需要开两个终端挂着 现在去跑 `install` 就行。 由于NSSM官网无法下载。 NSSM 官网挂 503 了。给你两个方案: 方案A:手动下载 NSSM(推荐,等官网恢复) 从 https://nssm.cc/release/nssm-2.24.zip 下载,解压出 win64\nssm.exe 放到 $env:LOCALAPPDATA\nssm\nssm.exe,然后重跑脚本。 方案B:用 Windows 原生计划任务(现在就能用,无需下载) 现在运行这个(无需下载任何东西): ```powershell .\scripts\install-tasks.ps1 install ``` **原理**:Windows 计划任务在登录时自动启动 `opencode serve` 和 `opencode-telegram start`,并且崩溃后 1 分钟自动重启。 **效果对比:** | | NSSM 方案(A) | 计划任务方案(B) | |---|---|---| | 关终端后继续运行 | ✅ | ✅ | | 开机自启 | ✅ | ✅(需登录) | | 无人登录也运行 | ✅ | ⚠️ 需手动改设置 | | 崩溃自动重启 | ✅ | ✅(1分钟后) | | 需下载工具 | ❌ 官网挂中 | ✅ 纯原生 | 等 NSSM 官网恢复了,再切到方案 A 即可,两脚本不冲突。 搞定。先把旧的(有窗口的)卸载,再装新的(无窗口的)。管理员 PowerShell 依次执行: ```powershell # 1. 卸载旧任务(之前用 cmd.exe 的版本) .\scripts\install-tasks.ps1 uninstall # 2. 安装新任务(用 VBS 隐藏窗口) .\scripts\install-tasks.ps1 install # 3. 立即启动测试 .\scripts\install-tasks.ps1 start # 4. 查看状态(确认 running) .\scripts\install-tasks.ps1 status ``` **回答你的两个问题:** > 终端窗口,能关闭吗? **能**。当前 PowerShell 窗口随便关,两个服务在后台跑。 > 以后开机自启,也会弹出这两窗口吗? **不会**。现在用 `wscript.exe` 跑 VBS 脚本,`WScript.Shell.Run` 的窗口样式设为 `0`(隐藏),完全无窗口。开机登录后静默启动,你什么也看不到。 可以用 `status` 命令检查进程是否在跑。 **任务管理器里能看到吗?** 能。切到 **详细信息** 选项卡,找 `opencode.exe` 和 `opencode-telegram.exe`(或 `node.exe`)。虽然没窗口,但进程本身是存在的。 **想关闭的话,几种方式:** **方式 1 — 命令行(最方便)** ```powershell # 停掉进程 taskkill /f /im opencode.exe taskkill /f /im opencode-telegram.exe # 或者停掉计划任务(下次开机不再自动启动) Stop-ScheduledTask -TaskName OpenCodeServe Stop-ScheduledTask -TaskName OpenCodeTelegram ``` **方式 2 — 脚本管理** ```powershell # 停止服务(不卸载,下次开机还会启动) .\scripts\install-tasks.ps1 uninstall # 注意:uninstall 会停止并删除任务,彻底不再自启 ``` **方式 3 — 任务管理器** Ctrl+Shift+Esc → 详细信息 → 右键 `opencode.exe` / `opencode-telegram.exe` → **结束任务** **方式 4 — 任务计划程序(管理自启行为)** Win+R → `taskschd.msc` → 任务计划程序库 → 找到 `OpenCodeServe` / `OpenCodeTelegram` → 右键禁用或删除 如果只是临时想停一下,用方式 1 或方式 3 最快。想彻底关掉开机自启,用 `uninstall` 或去任务计划程序里禁用。 改好了。现在用的是 `powershell.exe -WindowStyle Hidden` 直接作为计划任务动作,刚才实测 PID 44928 成功监听 4096。 你有两个选择: **选项 A:立即生效(需要关掉当前对话)** ```powershell .\scripts\install-tasks.ps1 uninstall # 关掉你当前的 opencode 终端 .\scripts\install-tasks.ps1 install ``` **选项 B:重启后生效(不中断当前对话)** ```powershell .\scripts\install-tasks.ps1 uninstall .\scripts\install-tasks.ps1 install # 然后重启电脑,开机后直接就能访问 127.0.0.1:4096 ``` 推荐 B,你不丢当前进度。装完 reboot 就行。 ## 进阶,opencode的webui也跑起来 ### 第一回 找到了。opencode serve 默认只绑定 127.0.0.1,手机访问需要改成 0.0.0.0。两个选项: 方式 命令 手机浏览器输 IP 访问 opencode serve --hostname 0.0.0.0 手机浏览器输 opencode.local 访问 opencode serve --mdns(推荐) --mdns 更方便——手机连上同个 WiFi,打开浏览器输 http://opencode.local:4096 就行,不用查 IP。 我来更新计划任务,加上 --mdns: ### 第二回 现在你关掉当前 opencode,手动试一下这个: opencode serve --hostname 0.0.0.0 --port 4096 端口固定回 4096,同时手机也能访问了。手机上需要输你电脑的局域网 IP,查一下: ipconfig | Select-String "IPv4" 一般是 192.168.x.x 这样的地址。手机连同一个 WiFi,浏览器打开 http://192.168.x.x:4096/。 验证好了之后,按之前的步骤重新安装计划任务,重启后就能自动生效: .\scripts\install-tasks.ps1 uninstall .\scripts\install-tasks.ps1 install **然后重启电脑** ### 第三回 改好了,加了 --mdns。你需要重新安装计划任务来更新参数: .\scripts\install-tasks.ps1 uninstall .\scripts\install-tasks.ps1 install 然后 重启电脑。开机后: - 本机:http://127.0.0.1:4096/ 照常访问 - 手机:连同一个 WiFi,浏览器打开 http://opencode.local:4096/ 不需要查 IP,--mdns 会自动广播 opencode.local 域名。 你也可以在 PS 里现在试一下效果(先不要重启,只是验证)——关掉当前 opencode,手动跑: opencode serve --mdns 然后手机浏览器打开 http://opencode.local:4096/,看能不能连上。验证好了再重启走计划任务。 ### 第四回 端口 4096 被占用了。之前测试时残留了 opencode 进程没清理。先杀掉再试: **杀掉所有 opencode 进程 ** taskkill /f /im opencode.exe **再启动** $env:OPENCODE_SERVER_PASSWORD="123456"; opencode serve --hostname 0.0.0.0 --port 4096 这样应该就不会报错了。验证密码和手机访问都正常后,执行: .\scripts\install-tasks.ps1 uninstall .\scripts\install-tasks.ps1 install 然后 reboot,全部自动跑起来。 ### 第五回 改好了。重新安装一下让新参数生效: .\scripts\install-tasks.ps1 install 装完后手机就能用 http://opencode.local:4096/ 访问了,密码 123456。 三种方式都能用: 方式 http://127.0.0.1:4096/ http://opencode.local:4096/ http://192.168.x.x:4096/ 不过安装会重启服务,你现在正在用这个页面跟我对话,装完后当前会话会断开。建议你先关掉这个标签页,再在 PS 里执行 install,然后打开浏览器重新连。
文章作者:
admin
文章链接:
https://amtb.info/show/NDIw
版权声明:
本博客所有文章除特別声明外,转载请注明来源
佛系程序员
!
分享:
搜索