Procházet zdrojové kódy

luci-app-ssr-plus: Optimize the code for generate NFT persistence rules.

zxlhhyccc před 1 dnem
rodič
revize
cd8f6bfa5d
1 změnil soubory, kde provedl 11 přidání a 15 odebrání
  1. 11 15
      luci-app-ssr-plus/root/usr/bin/ssr-rules

+ 11 - 15
luci-app-ssr-plus/root/usr/bin/ssr-rules

@@ -1241,7 +1241,6 @@ compare_rules() {
 	fi
 
 	# Generate temporary file for current rules
-	local temp_file=$(mktemp)
 	local rules_file=$(mktemp)
 	loger 7 "DEBUG: Temporary file path: $rules_file"
 
@@ -1255,18 +1254,18 @@ compare_rules() {
 	# Check if current rules were exported successfully
 	if [ ! -s "$rules_file" ] || ! grep -q "table" "$rules_file" 2>/dev/null; then
 		loger 4 "Failed to export current rules"
-		rm -f "$temp_file" "$rules_file"
+		rm -f "$rules_file"
 		return 1  # Export failed, need update
 	fi
 
 	# Compare current rules with rules in persistence file
 	if ! cmp -s "$rules_file" "$NFTABLES_RULES_FILE"; then
 		loger 6 "Rules differ, update needed"
-		rm -f "$temp_file" "$rules_file"
+		rm -f "$rules_file"
 		return 1  # Need update
 	fi
 
-	rm -f "$temp_file" "$rules_file"
+	rm -f "$rules_file"
 	loger 6 "Rules unchanged, no update needed"
 	return 0  # No update needed
 }
@@ -1277,21 +1276,17 @@ persist_nftables_rules() {
 		return 0
 	fi
 
-	# If mode unchanged and persistence file exists, skip update
-	if [ "$MODE_CHANGED" = "0" ] && [ -f "$NFTABLES_RULES_FILE" ]; then
-		loger 6 "Mode unchanged and persistence file exists, skipping update"
-		return 0
-	fi
-
 	# Force update: skip comparison check and delete old file
 	if [ "$FORCE_UPDATE" = "1" ]; then
 		loger 6 "Force update requested, removing old persistence file"
 		rm -f "$NFTABLES_RULES_FILE" 2>/dev/null
-	# Non-force update: compare rules
+	# Otherwise, if persistence file exists, compare rules
 	elif [ -f "$NFTABLES_RULES_FILE" ]; then
 		if compare_rules; then
 			loger 6 "Rules unchanged, skipping persistence update"
 			return 0
+		else
+			loger 6 "Rules changed, updating persistence"
 		fi
 	fi
 
@@ -1299,7 +1294,7 @@ persist_nftables_rules() {
 	mkdir -p "$NFTABLES_RULES_DIR" 2>/dev/null
 
 	# Generate nftables rule file
-	cat <<-'EOF' >>$NFTABLES_RULES_FILE
+	cat <<-'EOF' > "$NFTABLES_RULES_FILE"
 		#!/usr/sbin/nft -f
 
 		# ShadowsocksR nftables rules
@@ -1374,17 +1369,18 @@ start_auto_update_daemon() {
 		echo $$ > "/var/run/ssr-rules-daemon.pid"
 
 		while true; do
-			sleep 300
+			sleep "$AUTO_UPDATE_INTERVAL"
 			if [ -x "/usr/bin/ssr-rules" ]; then
+				# -C returns 0 if rules are OK, non-zero if need update
 				if /usr/bin/ssr-rules -C >/dev/null 2>&1; then
+					logger -t ssr-rules[daemon] "Rules status OK, no update needed"
+				else
 					logger -t ssr-rules[daemon] "Rules changed or missing, updating persistence"
 					if /usr/bin/ssr-rules -P >/dev/null 2>&1; then
 						logger -t ssr-rules[daemon] "Persistence rules updated successfully"
 					else
 						logger -t ssr-rules[daemon] "Failed to update persistence"
 					fi
-				else
-					logger -t ssr-rules[daemon] "Rules status OK, no update needed"
 				fi
 			else
 				logger -t ssr-rules[daemon] "Script not found, exiting daemon"