主题模式
Are you an LLM? You can read better optimized documentation at /asus/services-start.md for this page in Markdown format
华硕路由器 Merlin 固件开机脚本 (Services-start) 进阶编写与自动化运维实战
在刷入 梅林改版固件 后,华硕路由器的可玩性得到了质的飞跃。然而,许多高级玩家在部署自己的自定义服务(例如:自建 DDNS 脚本、内网穿透内网穿透二进制文件、开机清理日志、网络连通性守护进程)时,常常面临一个问题:路由器重启后,手动开启的服务就全部失效了。
梅林固件原生提供了一套极其强大的用户脚本(User Scripts)机制。其中,services-start 脚本是整个系统开机启动的核心“开关”。
本文将手把手带你理解 services-start 的运行机制,提供常用自动化运维的代码模板,并分享防止脚本死锁导致路由器无限重启的防砖技巧。
🧭 什么是 Services-start 脚本?
在梅林固件的启动流程中,系统服务全部初始化并启动完毕后,路由器会去扫描位于 /jffs/scripts/ 目录下的用户自定义脚本:
- 路径:
/jffs/scripts/services-start - 特性:此脚本仅在系统开机启动时运行一次。
- 权限:必须赋予可执行权限(
chmod +x),否则会被系统直接忽略。
🛠️ 第一步:前置条件设置
在编写脚本前,必须在路由器 Web 后台开启 JFFS 自定义脚本支持:
- 登录华硕路由器后台,点击
系统管理->系统设置。 - 找到 “启用 JFFS 自定义脚本与配置文件 (Enable JFFS custom scripts and configs)”。
- 将其更改为 “是 (Yes)”。
- 点击页面下方的“应用本页面设置”保存。
📝 第二步:创建与编辑第一个 Services-start 脚本
使用终端工具(如 Putty 或 Terminal)通过 SSH 登录你的路由器。
创建并编辑
services-start文件(使用自带的 vi 编辑器):bashvi /jffs/scripts/services-start写入以下最基础的脚本结构:
bash#!/bin/sh # 记录执行日志以方便排错 LOG_FILE="/tmp/services-start.log" echo "=== services-start started at $(date) ===" > $LOG_FILE
💻 第三步:实用自动化运维代码模板
在基础结构下方,你可以根据实际需求,追加以下实用代码段:
模板 A:等待网络连通后,启动自定义后台程序 (如内网穿透/网关)
如果你的程序依赖网络(例如需要自动运行 Cloudflare Tunnel 或自定义 DDNS 脚本),如果开机瞬间就运行,会因为网络还未拨号成功而报错退出。
解决方案:使用循环检测网关状态
bash
# 循环检测网络,直到获取到公网默认网关才继续
while [ -z "$(ip route | grep default)" ]; do
echo "Waiting for WAN connection..." >> $LOG_FILE
sleep 5
done
echo "WAN is UP! Starting custom services..." >> $RC_LOG
# 启动你的自定义二进制文件(必须加 & 在后台运行!)
/jffs/configs/frpc -c /jffs/configs/frpc.ini >/dev/null 2>&1 &模板 B:定时自动清理日志与内存缓存
华硕路由器因为内存容量有限(通常为 256M-512M),长期运行会导致系统缓存积压导致卡顿。可以在开机时写入定时清理任务(Cron):
bash
# 写入定时任务:每天凌晨 4 点释放系统缓存,并清理过期系统日志
cru a clean_cache "0 4 * * * sync && echo 3 > /proc/sys/vm/drop_caches"
cru a clean_log "30 4 * * * rm -rf /tmp/syslog.log-*"⚠️ 终极防砖守则(防无限重启死锁)
许多玩家在编写 services-start 脚本后,路由器一重启就直接卡死、Wi-Fi 不亮,甚至无限重启。这是因为犯了脚本编写的大忌。
1. 大忌:长耗时/死循环脚本不加 & 后台运行
梅林固件在执行用户脚本时,是同步阻塞的。如果你的脚本中有一个 while true 的死循环(如网络守护进程),或者运行了一个需要一直挂在后台的程序且没有在末尾加 &,那么整个路由器的启动过程会被永远卡在这个地方,导致无线 Wi-Fi 无法启动,甚至看守狗(Watchdog)判定系统卡死而强行重启路由器,造成无限死循环。
- 错误示范:
/jffs/configs/myprogram - 正确示范:
/jffs/configs/myprogram &(加上&放入后台异步运行)
2. 手动调试通过后再重启
在写完脚本后,千万不要直接运行 reboot 重启测试。 先在当前 SSH 终端中手动执行一次脚本:
bash
sh /jffs/scripts/services-start如果终端没有被卡住,且日志输出正常,确认无误后才能放心地重启路由器。
3. 万一变砖后的自救方法
如果不幸因为脚本死锁导致路由器卡死:
- 关机,拔掉所有 LAN 口网线。
- 用牙签按住 Reset 键开机,尝试进入 华硕官方救援模式 (Rescue Mode) 强行刷回原厂固件。
- 或者如果依然能登录 SSH,立刻运行
rm -rf /jffs/scripts/services-start删除祸首文件。
💬 总结
通过 services-start 开机脚本,你的梅林路由器已经成为了一台真正意义上的“微型 Linux 服务器”。利用它做开机自启、守护进程、资源释放,能让你的全屋网络变得智能且极具可定制性。
- 下一步推荐:在路由器上运行代理?去看看我们的 Merlin Clash 进阶分流规则。
- 网络带宽翻倍:利用多端口,参考 华硕双 WAN 负载均衡叠加教程。
