|
|
背景介绍
- asus官方固件不支持同时设置组播vlan和iptv vlan,需要开机执行一个shell
- 需要定时更新公网IP到cloudflare
- 运行自己的应用
步骤
- 在usb软件中心中随便按装一个应用
- 编写自己需要运行的shell
- 在ipkg中启动(u盘挂载时执行)
场景一: 每次开机必须执行的shell因为不支持组播,自己将3996组播复制到eth4上去
- ### 需要运行的shell
- admin@RT-BE88U-2E98:/tmp/mnt/sdb/asusware.arm/etc/init.d# cat S50iptv
- #!/bin/bash
- log() {
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
- }
- enable_iptv() {
- iface=eth9.3996
- if [ ! -d /sys/class/net/$iface ]; then
- ip link add link eth9 name eth9.3996 type vlan id 3996
- log add eth9.3996
- else
- log $iface already exists
- fi
- if [ "$(cat /sys/class/net/$iface/operstate 2>/dev/null)" = "up" ]; then
- log $iface is UP
- else
- ifconfig $iface up
- echo "$iface set to UP"
- fi
- if tc qdisc show dev "$iface" ingress | grep ingress; then
- log tc qdisc OK
- else
- tc qdisc add dev eth9.3996 ingress
- log tc qdisc qdisc added
- fi
- if tc filter show dev "$iface" ingress protocol ip | grep 224.0.0.0; then
- log tc already exist
- else
- tc filter add dev eth9.3996 ingress protocol ip flower dst_ip 224.0.0.0/4 action mirred egress mirror dev eth4.v0
- log tc filter added
- fi
- }
- APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
- LOG_FILE=$APPS_MOUNTED_PATH/log/iptv.log
- enable_iptv > $LOG_FILE
复制代码
场景二: 定时运行的二进制没时间研究wan口的变化事件,写了shell 运行二进制,二进制使用go 开发,复制到u盘 bin/下构建自己二进制 GOOS=linux GOARCH=arm64 go build
- ### 执行的shell
- #!/bin/bash
- APPS_MOUNTED_PATH=`nvram get apps_mounted_path`
- BINARY_FLE=$APPS_MOUNTED_PATH/asusware.arm/bin/cloudflare-dns
- LOG_FILE=$APPS_MOUNTED_PATH/log/cloudflare.log
- cloudflareDNS() {
- while true; do
- $BINARY_FLE >> $LOG_FILE
- sleep 300
- done
- }
- currentPID=$$
- ## 因为直接拔掉u盘,导致shell还在后台执行,先kill之前的
- ## 不过应该有stop 的回调
- for pid in $(ps | grep S50cloudflaredns | grep -v grep | awk '{print $1}' | grep -v $currentPID); do
- kill -9 $pid
- done
- cloudflareDNS &
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|