华硕网络产品技术交流平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 1333|回复: 1

[分享] 华硕RT-BE88U启动自己的应用

[复制链接]

28

主题

27

回帖

394

积分

中级会员

Rank: 3Rank: 3

积分
394
发表于 2025-12-6 20:08:25 | 显示全部楼层 |阅读模式
RT系列
机型名称: RT-BE88U
背景介绍
  • asus官方固件不支持同时设置组播vlan和iptv vlan,需要开机执行一个shell
  • 需要定时更新公网IP到cloudflare
  • 运行自己的应用

步骤
  • 在usb软件中心中随便按装一个应用
  • 编写自己需要运行的shell
  • 在ipkg中启动(u盘挂载时执行)

场景一: 每次开机必须执行的shell
因为不支持组播,自己将3996组播复制到eth4上去
  1. ### 需要运行的shell
  2. admin@RT-BE88U-2E98:/tmp/mnt/sdb/asusware.arm/etc/init.d# cat S50iptv
  3. #!/bin/bash

  4. log() {
  5.     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
  6. }

  7. enable_iptv() {
  8.     iface=eth9.3996
  9.     if [ ! -d /sys/class/net/$iface ]; then
  10.         ip link add link eth9 name eth9.3996 type vlan id 3996
  11.         log add eth9.3996
  12.     else
  13.         log $iface already exists
  14.     fi

  15.     if [ "$(cat /sys/class/net/$iface/operstate 2>/dev/null)" = "up" ]; then
  16.         log $iface is UP
  17.     else
  18.         ifconfig $iface up
  19.         echo "$iface set to UP"
  20.     fi

  21.     if tc qdisc  show dev "$iface" ingress | grep ingress; then
  22.         log tc qdisc OK
  23.     else
  24.         tc qdisc  add dev eth9.3996 ingress
  25.         log tc qdisc qdisc added
  26.     fi

  27.     if tc filter show dev "$iface" ingress protocol ip | grep 224.0.0.0; then
  28.         log tc already exist
  29.     else
  30.         tc filter add dev eth9.3996 ingress protocol ip flower dst_ip 224.0.0.0/4  action mirred egress mirror dev eth4.v0
  31.         log tc filter added
  32.     fi
  33. }

  34. APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
  35. LOG_FILE=$APPS_MOUNTED_PATH/log/iptv.log

  36. enable_iptv > $LOG_FILE
复制代码


场景二: 定时运行的二进制
没时间研究wan口的变化事件,写了shell 运行二进制,二进制使用go 开发,复制到u盘 bin/下构建自己二进制  GOOS=linux GOARCH=arm64  go build
  1. ### 执行的shell
  2. #!/bin/bash

  3. APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
  4. BINARY_FLE=$APPS_MOUNTED_PATH/asusware.arm/bin/cloudflare-dns
  5. LOG_FILE=$APPS_MOUNTED_PATH/log/cloudflare.log

  6. cloudflareDNS() {
  7.     while true; do
  8.         $BINARY_FLE >> $LOG_FILE
  9.         sleep 300
  10.     done
  11. }

  12. currentPID=$$
  13. ## 因为直接拔掉u盘,导致shell还在后台执行,先kill之前的
  14. ## 不过应该有stop 的回调
  15. for pid in $(ps | grep S50cloudflaredns | grep -v grep | awk '{print $1}' | grep -v $currentPID); do
  16.     kill -9 $pid
  17. done

  18. cloudflareDNS &
复制代码

微信扫一扫,阅读更方便^_^

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

28

主题

27

回帖

394

积分

中级会员

Rank: 3Rank: 3

积分
394
 楼主| 发表于 2025-12-8 10:38:22 | 显示全部楼层
昨天发现了 路由器进程有crond 于是优化了下 逻辑
流程:
1. 开机启动/usb挂在 执行的shell 替换为写入cron文件
  1. #!/bin/bash

  2. APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
  3. BIN_PATH=$APPS_MOUNTED_PATH/asusware.arm/bin/sync-cloudflare-dns.sh

  4. rm /var/spool/cron/crontabs/admin
  5. echo "*/5 * * * * $BIN_PATH" > /var/spool/cron/crontabs/admin
复制代码

这样保证每次usb挂载或者重启之后 /var/spool/cron/crontabs/admin 有正确的执行路径
rm /var/spool/cron/crontabs/admin 目的是为了触发crond 重新relaod(不理解为什么append内容 没生效)

shell内容 类似于
  1. #!/bin/bash

  2. APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
  3. BINARY_FLE=$APPS_MOUNTED_PATH/asusware.arm/bin/cloudflare-dns
  4. LOG_FILE=$APPS_MOUNTED_PATH/log/cloudflare.log


  5. $BINARY_FLE >> $LOG_FILE
复制代码

这样就可以保证每次usb 挂在后,路径动态更新,同时不用维护之前while true 的shell 了,
让crond 保证定时执行任务

》〉》〉终结
满足日常需求了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回列表 搜索 官方QQ群
×

秒后自动关闭

小黑屋|手机版|Archiver|华硕网络产品技术交流平台 ( 苏ICP备16010857号-1 )苏公网安备 32050502000499号

GMT+8, 2026-8-16 19:20 , Processed in 5.813651 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表