← 返回首页

把一套 Windows 上的服务迁到 Linux 云服务器

2026-10-24 · 技术笔记

本地电脑上一直跑着几个小东西:一个聊天机器人、一个语音合成服务、一个控制手机的小接口。电脑一关就全停,想让它们 7×24 在线,于是决定搬到云服务器上。

为什么要迁

最直接的痛点是不连续。我晚上关电脑,服务就断;白天上课,服务也断。这些东西的价值恰恰在于"一直在",断断续续等于没有。

整体思路

分开做,别想着一次搬完:

反向隧道这个思路很关键。校园网没有公网 IP,端口也进不来,但"由内向外"建立连接是没问题的,隧道一开,云上就能反向调用本地的东西。

踩到的坑

1. 临时目录权限

某个命令行工具会在系统的临时目录写日志。如果那个文件被另一个进程创建并锁住权限,工具就起不来,报 Permission denied。解决方法是给它一个自己的临时目录,启动前把环境变量指过去。

2. 子进程管道死锁

频繁调用外部命令时,如果同时读写它的输出管道,很容易卡死。后来改成把输出重定向到临时文件再读,问题消失。

3. 中文路径

远程拷贝时路径里带中文和空格,参数会被拆开,报出一串 "找不到文件"。改用标准输入管道传文件,绕开路径解析。

4. 服务被误杀

写守护脚本时图省事,每次启动都去杀某个共享的后台进程。结果那个进程一被杀,重新建立连接需要额外握手,而握手又被下一次启动打断——形成死锁,表现为"服务还活着,但永远连不上设备"。结论:不要随便杀共享进程,先探测它是否真的无响应。

现在的样子

云上跑着核心服务,本地只在需要时提供服务能力,中间靠隧道连。电脑关机不影响主要功能,只是暂时失去那两项本地能力。

经验:迁服务最难的不是"怎么跑起来",而是"怎么在异常时自己恢复"。先写好守护和探测,比先调通功能更重要。