You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenWRT开机后无法自动执行/etc/init.d下自定义shell脚本如何解决

OpenWRT 开机自动执行自定义init.d脚本故障解决方案
  • 修正脚本命名规则
    OpenWRT /etc/init.d/ 目录下的服务脚本默认不需要带 .sh 后缀,建议将当前脚本重命名后重新注册服务:
mv /etc/init.d/customchain.sh /etc/init.d/customchain
chmod +x /etc/init.d/customchain
/etc/init.d/customchain disable
/etc/init.d/customchain enable
  • 调整启动逻辑避免规则被覆盖
    默认OpenWRT防火墙服务会在开机过程中重载规则,可将脚本中的START值调整为99以上,或在start函数开头添加等待逻辑,避免规则被后续启动的防火墙服务覆盖:
start(){
    # 等待网络和防火墙初始化完成
    sleep 15
    # 此处替换为你的自定义iptables规则,建议写命令绝对路径
    /usr/sbin/iptables [你的规则参数]
}

若你使用的是22.03及以上版本的OpenWRT,系统默认使用fw4+nftables框架,iptables为兼容层,建议确认iptables-nft包已安装,或直接使用nftables命令编写规则。

  • 添加日志排查执行状态
    在start函数开头添加日志输出,方便定位故障:
logger "customchain service is running"

重启后执行logread | grep customchain查看日志:

  • 无对应日志:排查软链接权限、脚本shebang行是否正确,确认/etc/rc.d/S99customchain软链接指向正常
  • 有对应日志但规则未生效:确认脚本内命令无bash专属语法,所有命令使用绝对路径,排查是否有其他开机服务重载了iptables规则
  • 备选方案:使用rc.local兜底
    若上述方案都不生效,可直接将脚本执行命令写入/etc/rc.local文件的exit 0行之前:
/etc/init.d/customchain start

/etc/rc.local为OpenWRT开机最后执行的脚本,可保证你的规则在所有系统服务初始化完成后加载。

内容的提问来源于stack exchange,提问作者Popsicle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:36:03