Parcourir la source

fix: router mode

Dew-OF-Aurora il y a 2 semaines
Parent
commit
f28f013af2
2 fichiers modifiés avec 9 ajouts et 5 suppressions
  1. 3 3
      README.md
  2. 6 2
      scripts/router_local_update.sh

+ 3 - 3
README.md

@@ -357,7 +357,7 @@ while [ "$i" -le 5 ]; do
 done
 
 cru d vmess_rotate
-cru a vmess_rotate "0 * * * * cd $VMESS_DIR && sh scripts/router_local_update.sh $CONFIG >> $UPDATE_LOG 2>&1"
+cru a vmess_rotate "0 */12 * * * cd $VMESS_DIR && sh scripts/router_local_update.sh $CONFIG >> $UPDATE_LOG 2>&1"
 
 sleep 10
 start_vmess_http
@@ -405,7 +405,7 @@ curl http://127.0.0.1:8080/current_ip.txt
 
 > [!WARNING]
 > **为什么要配置防擦写优化?**
-> 路由器的 `/jffs` 目录是位于 NAND/NOR Flash 物理闪存介质上的。本项目默认每小时执行一次本地 `cfst` 测速并生成 `result.csv`。如果将这些临时文件直接写入 `/jffs`,**长期高频擦写将严重缩短路由器硬件闪存的寿命**。
+> 路由器的 `/jffs` 目录是位于 NAND/NOR Flash 物理闪存介质上的。本项目默认每 12 小时执行一次本地 `cfst` 测速并生成 `result.csv`。如果将这些临时文件直接写入 `/jffs`,**长期高频擦写将严重缩短路由器硬件闪存的寿命**。
 
 本项目已经完美支持了**绝对路径智能解析与动静分离存储**方案。你可以将所有高频读写的临时文件和运行期数据全部重定向至系统的 **RAM 内存临时文件系统(`/tmp`)**,而仅将最关键的初始化与容灾文件(`state.json`)保存在闪存上。
 
@@ -435,7 +435,7 @@ STATE_FILE="/jffs/vmess/state.json"
 
 #### 5.8.2 原理解析与效果
 1. **自动建目录**:在 RAM 中,`/tmp/vmess_runtime` 会在每次开机或定时器运行 `router_local_update.sh` 时,通过 `mkdir -p` 自动创建,无需手动干预。
-2. **零闪存磨损**:在测速时,`cfst` 会将大量的下载速度数据、中间进度及最终的 `vmess_result.csv` 写入 RAM 内存,彻底消除闪存介质每小时擦写几百 KB 的问题。
+2. **零闪存磨损**:在测速时,`cfst` 会将大量的下载速度数据、中间进度及最终的 `vmess_result.csv` 写入 RAM 内存,彻底消除闪存介质每 12 小时擦写几百 KB 的问题。
 3. **极速读取**:BusyBox `httpd` 将直接挂载 `/tmp/vmess_runtime` 目录来服务 Sub-Store。因为数据常驻内存,HTTP 响应速度可以提升至微秒级。
 4. **断电容灾存留**:如果路由器断电重启,内存中的 `/tmp` 随之清空。但由于我们把备用状态 `state.json` 单独放回了物理闪存 `/jffs/vmess/state.json`,下一次定时器启动时,如果暂时无法连接网络或测速报错,脚本依然能成功从 Flash 读回上次可用的 fallback IP 并完美恢复服务。
 

+ 6 - 2
scripts/router_local_update.sh

@@ -157,7 +157,8 @@ write_success_outputs() {
 }
 EOF
 
-  cat > "$STATE_PATH" <<EOF
+  if [ "$selected_ip" != "${LAST_GOOD_IP:-}" ] || [ ! -f "$STATE_PATH" ]; then
+    cat > "$STATE_PATH" <<EOF
 {
   "updated_at": "$UPDATED_AT",
   "$STATE_LAST_GOOD_KEY": "$escaped_ip",
@@ -167,6 +168,7 @@ EOF
   "source_type": "cfst_local_busybox"
 }
 EOF
+  fi
 
   cat > "$EXPORT_VARS_PATH" <<EOF
 {
@@ -194,7 +196,8 @@ write_error_with_fallback() {
 }
 EOF
 
-  cat > "$STATE_PATH" <<EOF
+  if [ "$last_good_ip" != "${LAST_GOOD_IP:-}" ] || [ ! -f "$STATE_PATH" ]; then
+    cat > "$STATE_PATH" <<EOF
 {
   "updated_at": "$UPDATED_AT",
   "$STATE_LAST_GOOD_KEY": "$escaped_ip",
@@ -203,6 +206,7 @@ EOF
   "source_type": "cfst_local_busybox"
 }
 EOF
+  fi
 
   cat > "$EXPORT_VARS_PATH" <<EOF
 {