一、为何用 systemd 管理 Clash / Mihomo
在 Clash Linux 使用场景里,很多人先在终端前台运行 mihomo -d /path/to/config,验证订阅与规则无误后再考虑常驻。若仅依赖手工启动,SSH 断线、终端关闭或进程崩溃都会导致代理中断;而 systemd 能统一处理开机自启、工作目录与环境变量、自动重启策略与日志归集(journalctl),运维成本明显低于 nohup、screen 等临时方案。
需要说明的是:本文聚焦内核进程(Mihomo)的服务化;若你需要图形界面,可在桌面环境使用各发行版自带的 Clash 图形客户端,安装包可从本站 下载页 获取。无头服务器或习惯命令行的用户,则更适合「二进制 + systemd」这条路径。
external-controller、DNS 等)在前台模式下调通,再写入 systemd,可避免把「YAML 写错」与「单元路径写错」两类问题搅在一起排查。
二、系统准备与目录规划
以下假设你使用 Ubuntu 22.04,且具备 sudo 权限。先更新软件索引并安装常用工具(用于下载发行包与解压):
sudo apt update
sudo apt install -y curl ca-certificates unzip
推荐为代理服务单独建系统用户与目录,避免以 root 长期跑业务进程。示例(可按你方规范调整用户名与路径):
- 配置目录:
/etc/mihomo(存放config.yaml、GeoIP等) - 可执行文件:
/usr/local/bin/mihomo - 运行用户:例如
clash,由 systemd 的User=指定
0.0.0.0)或对外暴露 外部控制器端口,务必配合防火墙与强认证,仅在可信网络内使用;生产环境建议仅监听 127.0.0.1 并通过 SSH 转发管理。
三、获取内核二进制与安装路径
Mihomo 上游以 GitHub Release 等形式分发各架构二进制;你需要按机器架构选择(常见桌面与云主机为 amd64,ARM 设备为 arm64)。下载后校验压缩包完整性(若上游提供校验和),解压得到可执行文件,再安装到系统路径:
# Example: adjust version and architecture to match your release
sudo install -m 755 mihomo /usr/local/bin/mihomo
若你更习惯由包管理器或镜像站分发,也可使用订阅方提供的「Linux 一键包」,关键是二进制路径与版本与下文 ExecStart 一致。开源协议、Issue 与源码协作仍以上游仓库为准;安装包与内核分发若需从可信渠道获取,可优先查阅本站下载说明,避免误装来路不明的打包文件。
四、配置文件与监听端口要点
在 /etc/mihomo 中准备 config.yaml(或你自定义的主配置名,与启动参数一致)。与校验端口强相关的几项通常包括:
- mixed-port 或分别的 port / socks-port:本机或局域网设备使用的代理入口。
- external-controller:REST API 与面板连接地址,例如
127.0.0.1:9090。 - secret:外部控制器鉴权;留空时部分客户端会拒绝远程,具体行为以当前内核版本为准。
- bind-address:仅本机使用时设为
*或127.0.0.1的策略需与防火墙、局域网需求一致。
将配置目录权限交给运行用户读取,避免全局可读泄露订阅与 secret:
sudo chown -R clash:clash /etc/mihomo
sudo chmod 750 /etc/mihomo
配置文件语法与字段含义以 官方文档与站内配置说明为准;升级内核大版本时,留意废弃字段与默认行为变化。
五、编写 systemd 单元(自启与崩溃重启)
在 /etc/systemd/system/mihomo.service 创建单元文件。下面是一份示意模板:请根据实际二进制路径、配置目录与运行用户修改。
[Unit]
Description=Mihomo (Clash Meta) proxy
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=clash
Group=clash
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
字段说明(与「开机自启」「崩溃重启」直接相关)
- Restart=on-failure:进程异常退出时由 systemd 按 RestartSec 间隔自动拉起;正常
systemctl stop不会无限重启。 - After=network-online.target:尽量在网络就绪后再启动,减少启动竞态(仍建议配置里做好 DNS 重试)。
- CapabilityBoundingSet / AmbientCapabilities:若需绑定 1024 以下特权端口,可保留;仅使用高端口时也可删去 capability 行以缩小权限面。
- User / Group:以非 root 运行;确保该用户对配置目录有读权限、对运行时要写入的目录(若有)可写。
若你希望在登录会话内而非系统级运行,可使用 systemd --user 用户单元,路径与 enable --user 流程不同;服务器场景一般仍推荐系统级单元,便于未登录时亦保持服务可用。
六、启用服务与查看日志
写入单元文件后重载 systemd,启用并立即启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
查看状态与跟踪日志:
systemctl status mihomo --no-pager
journalctl -u mihomo -e -f
修改 config.yaml 后,若内核支持热重载,可通过外部控制器接口或客户端执行 reload;否则使用 sudo systemctl restart mihomo。观察日志中是否出现端口占用、配置解析错误或权限拒绝,再进入下一节做针对性校验。
七、校验端口、权限与连通性
按下列顺序自检,能快速区分「服务没起来」「端口没监听」与「代理链路问题」。
- 进程与监听:
ss -tlnp | grep -E 'mihomo|7890|9090'(端口号替换为你配置中的 mixed-port / external-controller)。 - 本机回环:
curl -x http://127.0.0.1:混合端口 https://www.google.com -I(示例;请遵守当地法律法规与网络使用政策)。 - 外部控制器:仅本机时访问
http://127.0.0.1:9090(或你的端口),确认 API 与鉴权符合预期。 - 权限:若日志出现
permission denied,检查配置目录属主、是否误用 root 写入导致clash用户无法读取。
| 现象 | 建议优先检查 |
|---|---|
| 服务 active 但无监听端口 | 配置是否加载成功;是否与其他实例重复启动;YAML 路径是否在 ExecStart 中正确 |
| 仅 127.0.0.1 可连,局域网不通 | bind-address 与防火墙(ufw / 云安全组);是否与 Windows 局域网场景一样存在「未监听 0.0.0.0」问题 |
| 频繁重启 | journalctl 中崩溃栈或配置错误;适当放宽 RestartSec 避免打爆日志 |
与 Android 端图形客户端相比,Linux 命令行部署更依赖你显式写出端口与权限;一旦这三项对齐,长期稳定性通常优于手工前台进程。
八、常见故障速查
- 端口已被占用:用
ss -tlnp找到占用者,修改配置端口或停止冲突服务。 - 升级内核后无法启动:阅读 Release Note,检查废弃字段与默认监听地址变化。
- 仅特定用户可用:套接字权限与运行用户不一致时,检查是否错误地用 root 生成过 pid 文件或缓存目录。
- 希望崩溃后必重启:可将
Restart=设为always并评估日志量;一般on-failure已足够。
若你同时在桌面使用 Clash Verge 等客户端,注意不要让多个内核争抢同一端口;与 macOS 上系统代理排障类似,「多实例冲突」在 Linux 上同样常见。
九、小结
在 Ubuntu 22.04 上完成 Clash Linux / Mihomo 的安装与 systemd 托管后,你相当于把代理从「临时进程」升级为「系统服务」:开机自启、崩溃重启与日志可追溯都落在标准运维路径上。再按本文顺序做端口与权限校验,多数「能配规则但服务不稳」的问题会收敛到可复现的几类原因。
相比功能零散的小工具,Clash 系在规则、内核与多平台客户端上的一致性更好;把 Linux 服务端跑稳之后,与 Windows、macOS、Android 上的用法可以共享同一套策略思路,仅部署形态不同。
若你尚未安装图形客户端或希望从本站统一获取分发入口,可先访问下载页选择适合自己系统的版本,再按本文步骤在 Linux 上部署内核服务即可。