ZeroTier 重装后报Waiting for ZeroTier service

1. 场景还原

在 Mac 上用 ZeroTier 搭了内网穿透,基于某些原因卸载重装后,再次打开软件无法正常使用,一直提示以下信息:

Waiting for ZeroTier service...

2. 出错原因

背后的原因,其实不是 ZeroTier 自身安装出了 bug,而是 macOS 的服务管理机制 launchd 没有正确加载 ZeroTier 的后台服务

更细一点说:

  • ZeroTier 在 macOS 上的后台是通过一个叫 com.zerotier.one.plist 的配置文件来托管的,这个文件放在 /Library/LaunchDaemons/ 下。

  • 第一次装的时候,它会被 launchd 正常管理;但卸载时,可能残留了一些 持久化配置(override),比如服务被标记成禁用。

  • 重新安装后,虽然 .plist 又回来了,但 launchd 并不会自动刷新之前的状态,导致 ZeroTier 服务并没有被真正加载。

结果就是:前台的ZeroTier一直在等后台服务响应,但后台压根没起来,于是就一直提示“Waiting for ZeroTier service”。

3. 解决方法

解决办法其实很简单,只要手动把服务加载到 launchd 里,并且设置成开机自启就行:

sudo launchctl load -w /Library/LaunchDaemons/com.zerotier.one.plist
  • launchctl load:告诉 macOS 把这个守护进程配置文件读进来,启动服务。

  • -w:写入持久化设置,确保以后开机也会自动启动 ZeroTier。

运行完这个命令之后,再次打开ZeroTier软件就能正常运行。

4. 知识拓展

macOS 的 launchd 与 plist

在 macOS 里,launchd 是系统的“管家”,它从系统启动的第一刻起就在后台运行,负责统一管理各种服务和进程。可以把它类比成 Linux 的 systemdWindows 的服务管理器

.plist 文件(Property List 的缩写),就是 launchd 的说明书。

  • 它用 XML 格式定义了一个服务的启动方式、运行命令、是否随开机启动、日志输出等信息。

  • 按存放位置不同,分为:

    • /System/Library/LaunchDaemons/:系统自带的守护进程

    • /Library/LaunchDaemons/:所有用户共享的第三方守护进程(比如 ZeroTier)

    • ~/Library/LaunchAgents/:只针对当前用户的服务或应用

简单来说:
launchd 就是服务调度员,.plist 就是服务说明书
你把说明书交给调度员,它才知道什么时候、怎么帮你把服务跑起来。

launchctl 常用命令(macOS 服务管理)

1. 加载 / 卸载服务

# 加载服务(使其生效)
sudo launchctl load /Library/LaunchDaemons/xxx.plist

# 加载并写入持久化设置(开机自启)
sudo launchctl load -w /Library/LaunchDaemons/xxx.plist

# 卸载服务(停止并移除)
sudo launchctl unload /Library/LaunchDaemons/xxx.plist

# 卸载并移除持久化设置(取消开机自启)
sudo launchctl unload -w /Library/LaunchDaemons/xxx.plist

-w 代表 write override,也就是修改系统对该服务的持久化启用/禁用状态。

2. 查看服务状态

# 查看所有服务(很长,可以加 grep 过滤)
launchctl list

# 查看某个具体服务
launchctl list | grep zerotier

# 查看当前用户的服务
launchctl print gui/$(id -u)

# 查看系统级服务
sudo launchctl print system

3. 启动 / 停止服务

# 启动某个服务
sudo launchctl start com.zerotier.one

# 停止某个服务
sudo launchctl stop com.zerotier.one

注意:start/stop 只是临时生效,不会影响下次开机。

4. 检查 / 调试

# 检查服务配置文件
plutil /Library/LaunchDaemons/com.zerotier.one.plist

# 查看服务详细信息,如果服务有错误,会在这里看到状态码或日志
sudo launchctl print system/com.zerotier.one

5. 其它

# 重新加载 launchctl 的配置(类似刷新)
sudo launchctl kickstart -k system/com.zerotier.one

# 移除某个服务的 override 设置(恢复默认)
sudo launchctl enable system/com.zerotier.one
sudo launchctl disable system/com.zerotier.one

总结

重装 ZeroTier 后一直提示“Waiting for service”,其实是 launchd.plist 没有对上号。只要手动 launchctl load -w 一下,把服务重新登记,问题就迎刃而解。

这也给我们一个启发:在 macOS 里,后台服务跑不动的时候,记得去看看是不是 launchd 那里没安排好排班表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值