高墙之外❤️

PassWall2 重启后不自动运行怎么办?

更新于 2026-11-02 · passwall.lol

简答:先不要反复点击“保存并应用”:通过 SSH 依次执行 `/etc/init.d/passwall2 enabled`、`/etc/init.d/passwall2 status` 和 `logread | grep -i passwall2`。如果未启用,执行 `/etc/init.d/passwall2 enable`;如果已启用但未运行,先执行 `start` 或 `restart`,再根据日志判断是配置、DNS、防火墙还是启动顺序问题。PassWall2 当前启动脚本本身包含可读取的启动延迟字段,但具体菜单和字段是否显示取决于安装版本。

定义:PassWall2 重启后不自动运行,通常要先判断开机自启动链接是否存在,再区分服务启动失败、配置未应用,以及服务已运行但 DNS、透明代理或防火墙规则尚未恢复。

先用 1 分钟判断:到底是哪一种故障?

本文是面向 OpenWrt 类固件的使用排查稿,不代表任何软件项目或固件的官方支持。PassWall2 项目仓库公开的初始化脚本使用 START=99,并通过 rc.common 管理启动;OpenWrt 的 enable 会创建开机启动链接,enabled 可以用于检查该链接是否存在。可先执行下面的命令,记录每条命令的输出。

现象先执行结果如何判断下一步
重启后服务完全没有启动/etc/init.d/passwall2 enabled没有返回成功,或系统提示未启用执行 /etc/init.d/passwall2 enable,再检查启动链接
已启用但启动失败/etc/init.d/passwall2 status
logread | grep -i passwall2
状态异常、核心进程不存在,或日志出现配置/DNS/权限错误先手动 restart,再按日志分流
服务运行但设备仍无法联网ps | grep -E 'xray|sing-box' | grep -v grep
logread | grep -Ei 'dnsmasq|nft|firewall|passwall2'
进程存在,但 DNS、规则或路由未恢复检查 DNS、fw4/nftables、IPv6 和分流规则

OpenWrt 的初始化脚本接口包含 start、stop、restart、enable、disable 和 enabled 等动作,具体行为可参考 OpenWrt rc.common 实现 与 OpenWrt service 命令实现。

第一步:在 LuCI 和 SSH 中确认开机自启动

LuCI 检查路径

登录路由器管理界面,进入“服务 → PassWall2”,先确认主开关仍处于开启状态;然后点击“保存并应用”。不同固件或主题的菜单名称可能变化,如果保存后服务状态没有变化,不要仅凭页面提示判断启动成功,继续用 SSH 检查。

SSH 检查与修复

先查看启动项:

/etc/init.d/passwall2 enabled; echo $?

返回码为 0 通常表示已启用,非 0 则表示未启用或当前脚本不接受该检查。未启用时执行:

/etc/init.d/passwall2 enable
/etc/init.d/passwall2 enabled; echo $?

还可以直接查看启动链接:

ls -l /etc/rc.d/ | grep passwall2

OpenWrt 官方代码说明,启用服务会在 /etc/rc.d/ 下建立带有启动序号的链接;因此,只有 LuCI 页面上的开关并不能替代 SSH 对实际启动链接的确认。PassWall2 仓库也将其初始化脚本放在 /etc/init.d/passwall2,可参考PassWall2 当前初始化脚本。

第二步:手动启动一次,确认是“自启问题”还是“服务本身启动失败”

完成配置备份后执行:

cp -a /etc/config/passwall2 /root/passwall2.config.backup 2>/dev/null || true
/etc/init.d/passwall2 stop
/etc/init.d/passwall2 start
/etc/init.d/passwall2 status

如果 start 后恢复,且重启路由器又失效,重点检查启动项、启动顺序和网络依赖;如果手动 start 也失败,则不是单纯的“开机没自启”,要继续看日志。

如果刚刚在 LuCI 修改了主开关或节点,但运行中的核心没有变化,可以直接执行:

/etc/init.d/passwall2 restart

PassWall2 项目的公开问题记录曾出现“LuCI 已保存配置,但运行中的核心没有重启,手动执行 restart 后才生效”的情况;这只能说明该现象曾被报告,不能据此断定你的设备一定存在同一个缺陷。可参考PassWall2 Issue #1225。

第三步:用 logread 判断配置、DNS 还是防火墙导致启动失败

建议在重启前打开一条实时日志窗口:

logread -f | grep -Ei 'passwall2|xray|sing-box|dnsmasq|firewall|nft|tproxy'

另开一个 SSH 窗口执行:

/etc/init.d/passwall2 restart

重点记录以下几类结果:

  • 配置或 JSON 错误:通常表现为配置解析失败、字段缺失或核心立即退出。先回到最近一次能工作的节点、规则或 DNS 设置,不要同时修改多个项目。
  • DNS 相关错误:检查 /etc/resolv.conf 和当前系统实际使用的解析文件,再确认 PassWall2 所需的 DNS 进程是否已经运行。仅看到路由器有 DNS 地址,不等于代理规则和客户端 DNS 已经正确接管。
  • fw4/nftables 或 TProxy 相关错误:确认系统使用的防火墙架构,不要把旧版 fw3 教程中的命令直接套用到 fw4。项目公开问题中曾记录 fw4/nftables 环境下主开关保存后没有实际启停,手动 restart 才改变状态;这属于特定报告,不代表所有 fw4 设备都会复现,可参考PassWall2 Issue #996。
  • 依赖服务尚未就绪:如果日志显示 DNS、网络接口、策略路由或防火墙规则尚未准备好,先验证系统完全启动后手动 restart 是否恢复。

第四步:已启用但重启后仍失败,检查启动延迟和启动顺序

PassWall2 当前仓库中的主初始化脚本会读取 passwall2.@global_delay[0].start_delay,并在开机阶段按该值等待后再执行启动流程;但这不等于所有版本的 LuCI 都提供相同的设置入口,字段是否存在应以设备实际配置为准,可先读取:

uci -q get passwall2.@global_delay[0].start_delay

如果能读到数值,再考虑在 LuCI 中寻找“启动延迟”或类似字段;不要在不了解当前配置结构时直接创建大量 UCI 项。修改前备份:

cp -a /etc/config/passwall2 /root/passwall2.config.before-delay

修改后执行:

uci commit passwall2
/etc/init.d/passwall2 restart

PassWall2 初始化脚本明确包含读取启动延迟、等待后再进入启动流程的逻辑,证据见PassWall2 init 脚本中的 boot_func。如果你使用的是独立的 passwall2_server,不要把它与主服务混为一谈;公开 Issue #1139 曾记录服务端与 DNS、防火墙、nftables 等初始化顺序竞争的案例,建议先用“系统完全启动后手动重启服务端”验证是否属于顺序问题,而不是立即永久修改初始化脚本。该问题页面还显示为关闭且未计划处理,因此延迟方案只能作为针对具体设备的排查手段。

第五步:复测标准与安全回滚

修复后至少做一次完整复测,不要只看 LuCI 的主开关:

  1. 重启路由器,等待 WAN、DNS 和无线网络全部恢复。
  2. 执行 /etc/init.d/passwall2 enabled,确认自启动状态。
  3. 执行 /etc/init.d/passwall2 status,记录返回结果。
  4. 执行 ps | grep -E 'xray|sing-box' | grep -v grep,确认实际核心进程是否存在。
  5. 查看 logread | grep -Ei 'passwall2|dnsmasq|nft|firewall',确认没有新的启动错误。
  6. 分别测试一个应直连的地址和一个应按规则处理的地址,并同时观察 DNS 请求、规则命中和应用行为;仅凭出口 IP 变化不能证明所有流量都经过了代理。

如果修改启动延迟后出现启动更慢、DNS 循环或网络无法恢复,先恢复配置文件:

cp -a /root/passwall2.config.backup /etc/config/passwall2
uci commit passwall2
/etc/init.d/passwall2 restart

如果你曾手工编辑 /etc/init.d/passwall2 或 passwall2_server,升级前应保存差异;这类文件可能被软件包更新覆盖。更稳妥的做法是优先使用已有 UCI 配置、LuCI 选项和标准 enable/disable 命令,不要直接改启动脚本。

常见问题

1. PassWall2 页面显示开启,为什么重启后还是没有运行?

页面开关表示配置值,不一定等于实际启动链接、核心进程和防火墙规则都已生效。请依次检查 enabled、status、进程列表和 logread;如果手动 restart 后恢复,优先排查启动顺序或保存配置后未触发重启。

2. 应该执行 start 还是 restart?

如果服务确定没有运行,先用 start;如果你刚刚修改了节点、主开关、DNS 或规则,使用 restart 更适合验证新配置是否真正加载。PassWall2 当前脚本的 reload 会提示不支持配置热加载,并转为完整重启,可参考其初始化脚本。

3. 能不能直接把 START 改成更大的数字?

不建议直接改。启动序号只影响初始化脚本排列,不一定能解决 DNS、WAN、nftables 或策略路由尚未就绪的问题,而且软件升级可能覆盖手工修改。先用日志确认确实是启动顺序,再优先尝试当前版本已有的启动延迟字段或系统提供的标准机制。

4. 重启后核心进程存在,但客户端仍无法联网,算不算自动运行失败?

不一定。此时服务可能已经运行,问题可能在 DNS、IPv6、透明代理规则、默认节点或分流。请同时检查日志、DNS 请求、nftables 规则和实际应用行为,不能只凭进程存在或出口 IP 变化下结论。

常见问题

PassWall2 重启后不自动运行,第一条命令是什么?

先执行 `/etc/init.d/passwall2 enabled; echo $?`。返回 0 通常表示开机启动已启用;如果不是 0,执行 `/etc/init.d/passwall2 enable`,再检查 `/etc/rc.d/` 中是否存在 PassWall2 启动链接。

为什么 LuCI 保存配置后,PassWall2 仍然使用旧配置?

某些版本或环境可能出现配置已写入但运行中的核心没有重启的情况。执行 `/etc/init.d/passwall2 restart`,然后结合进程列表和日志确认新配置是否实际加载。

PassWall2 启动延迟应该设置多少?

没有适用于所有路由器的固定值。先读取当前版本是否存在 `passwall2.@global_delay[0].start_delay`,再以日志和重启复测结果调整;不要直接照搬其他设备的等待时间。

重启后 PassWall2 进程存在,但网络还是不通怎么办?

这通常不再是单纯的自启动问题。继续检查 DNS、IPv6、透明代理规则、nftables、默认节点和分流命中情况;仅凭进程存在不能证明全部流量已经按预期处理。

相关阅读

参考资料

  1. PassWall2 当前初始化脚本:启动延迟、enable 与 restart 逻辑
  2. OpenWrt rc.common:enable、disable、enabled 等初始化脚本动作
  3. OpenWrt service 命令:查看服务 enabled 与运行状态
  4. PassWall2 Issue #996:fw4/nftables 下保存配置后服务未实际启停的报告
  5. PassWall2 Issue #1225:LuCI 保存配置但运行核心未重启的报告
  6. PassWall2 Issue #1139:服务端启动顺序与 DNS、防火墙初始化竞争的报告