<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Launchd on OHTLY Blog</title>
    <link>https://blog.ohtly.com/tags/launchd/</link>
    <description>Recent content in Launchd on OHTLY Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 14 Jun 2026 14:24:22 +0800</lastBuildDate>
    <atom:link href="https://blog.ohtly.com/tags/launchd/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>KaTrain 远程 KataGo SSH 隧道 Socket 残留问题</title>
      <link>https://blog.ohtly.com/posts/2026-06-14-katrain-remote-katago-ssh-socket/</link>
      <pubDate>Sun, 14 Jun 2026 14:24:22 +0800</pubDate>
      <guid>https://blog.ohtly.com/posts/2026-06-14-katrain-remote-katago-ssh-socket/</guid>
      <description>&lt;p&gt;最近把 KaTrain 配成了远程 KataGo：本地 Mac 只运行 KaTrain 界面，真正的 KataGo 分析放到远端 GPU 服务器上跑。整体体验很好，但这次遇到一个很典型的问题：KaTrain 里远程引擎显示“崩溃”或“无法使用”。&lt;/p&gt;&#xA;&lt;p&gt;排查下来，服务器上的 GPU、Docker 镜像和模型文件都正常，真正的问题出在本地 SSH 隧道的 Unix socket 残留。&lt;/p&gt;&#xA;&lt;h2 id=&#34;远程-katago-的整体结构&#34;&gt;&#xA;  远程 KataGo 的整体结构&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%bf%9c%e7%a8%8b-katago-%e7%9a%84%e6%95%b4%e4%bd%93%e7%bb%93%e6%9e%84&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;我的配置大致是这样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;KaTrain&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  └─ engine.altcommand&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       └─ katago-bridge-analysis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            └─ /tmp/katago-tunnel.sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 └─ launchd 维护的 SSH 隧道&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      └─ 远端服务器 localhost:5000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                           └─ katago-multiplexer.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                └─ Docker KataGo TensorRT 容器&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里有几个关键点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;KaTrain 不直接启动本地 KataGo，而是通过 &lt;code&gt;engine.altcommand&lt;/code&gt; 调用一个 bridge 脚本。&lt;/li&gt;&#xA;&lt;li&gt;bridge 脚本连接本地 Unix socket：&lt;code&gt;/tmp/katago-tunnel.sock&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;这个 socket 背后是 launchd 长期维护的 SSH 隧道。&lt;/li&gt;&#xA;&lt;li&gt;远端服务器上有一个 &lt;code&gt;katago-multiplexer.py&lt;/code&gt;，负责把多个客户端请求转发给 KataGo analysis 进程。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;也就是说，KaTrain App 关闭以后，SSH 隧道仍然可以由 launchd 继续维护。这样下一次打开 KaTrain 时，不需要重新建立完整链路。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
