#!/bin/sh # Cell Lock Remove Script - Called by crontab at end time # Configuration UCI_CONFIG="quecmanager" LOG_DIR="/tmp/log/cell_lock" LOG_FILE="$LOG_DIR/cell_lock.log" STATUS_FILE="/tmp/cell_lock_status.json" QUEUE_DIR="/tmp/at_queue" TOKEN_FILE="$QUEUE_DIR/token" MAX_TOKEN_WAIT=15 TOKEN_PRIORITY=5 # Ensure log directory exists mkdir -p "$LOG_DIR" # Function to log messages log_message() { local message="$1" local level="${2:-info}" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") # Log to file echo "[$timestamp] [$level] $message" >> "$LOG_FILE" # Log to system log logger -t cell_lock_remove -p "daemon.$level" "$message" } # Function to update status update_status() { local status="$1" local message="$2" local active="${3:-0}" local locked="${4:-0}" # Create JSON status cat > "$STATUS_FILE" <&1) status=$? if [ $status -ne 0 ]; then log_message "AT command failed: $cmd (exit code: $status)" "error" return 1 fi echo "$output" return 0 } # Main function to remove cell lock remove_cell_lock() { log_message "Removing cell lock at scheduled end time" # Mark as inactive in UCI uci set "$UCI_CONFIG.cell_lock.active=0" uci commit "$UCI_CONFIG" # Update status update_status "inactive" "Cell lock scheduler is inactive - scheduled end time reached" 0 0 # Remove LTE lock log_message "Removing LTE lock" execute_at_command 'AT+QNWLOCK="common/4g",0' 10 local lte_status=$? # Remove NR5G lock log_message "Removing NR5G lock" execute_at_command 'AT+QNWLOCK="common/5g",0' 10 local nr5g_status=$? # Disable persistence log_message "Disabling lock persistence" execute_at_command 'AT+QNWLOCK="save_ctrl",0,0' 10 # Reset network to apply changes log_message "Resetting network connection to apply changes" execute_at_command "AT+COPS=2" 5 sleep 2 execute_at_command "AT+COPS=0" 5 log_message "Cell lock removed at scheduled end time" update_status "inactive" "Cell lock removed at scheduled end time" 0 0 return 0 } # Execute main function log_message "====== STARTING SCHEDULED CELL LOCK REMOVAL ======" "notice" remove_cell_lock log_message "====== COMPLETED SCHEDULED CELL LOCK REMOVAL ======" "notice" EOF # Copy to quecmanager directory to match crontab cp "$SERVICES_DIR/apply_lock.sh" "$QUECMANAGER_DIR/" cp "$SERVICES_DIR/remove_lock.sh" "$QUECMANAGER_DIR/" else echo "Scripts found in both locations or only in quecmanager directory" fi # Make all scripts executable chmod +x "$SERVICES_DIR/"*.sh 2>/dev/null chmod +x "$QUECMANAGER_DIR/"*.sh 2>/dev/null echo "All scripts are now executable" # 3. Create test status file cat > "/tmp/cell_lock_status.json" << EOF { "status": "active", "message": "Cell lock scheduler is active", "active": 1, "locked": 1, "timestamp": $(date +%s) } EOF chmod 644 "/tmp/cell_lock_status.json" echo "Created test status file at /tmp/cell_lock_status.json" # 4. Check crontab entries and fix if needed CRONTAB=$(crontab -l) APPLY_ENTRY=$(echo "$CRONTAB" | grep "apply_lock.sh") REMOVE_ENTRY=$(echo "$CRONTAB" | grep "remove_lock.sh") echo "Current crontab entries:" echo "$CRONTAB" | grep -E "apply_lock.sh|remove_lock.sh" # Extract times from UCI config START_TIME=$(uci -q get quecmanager.cell_lock.start_time) END_TIME=$(uci -q get quecmanager.cell_lock.end_time) if [ -n "$START_TIME" ] && [ -n "$END_TIME" ]; then START_HOUR=$(echo "$START_TIME" | cut -d':' -f1 | sed 's/^0//') START_MIN=$(echo "$START_TIME" | cut -d':' -f2 | sed 's/^0//') END_HOUR=$(echo "$END_TIME" | cut -d':' -f1 | sed 's/^0//') END_MIN=$(echo "$END_TIME" | cut -d':' -f2 | sed 's/^0//') echo "UCI times: Start=$START_HOUR:$START_MIN, End=$END_HOUR:$END_MIN" # Verify that crontab entries match UCI config NEW_CRONTAB=$(crontab -l | grep -v "apply_lock.sh\|remove_lock.sh") NEW_CRONTAB="$NEW_CRONTAB $START_MIN $START_HOUR * * * $QUECMANAGER_DIR/apply_lock.sh $END_MIN $END_HOUR * * * $QUECMANAGER_DIR/remove_lock.sh" echo "Setting crontab with correct paths and times..." echo "$NEW_CRONTAB" | crontab - echo "Updated crontab entries:" crontab -l | grep -E "apply_lock.sh|remove_lock.sh" else echo "WARNING: Could not find start/end times in UCI config" fi # 5. Test run scripts to verify they work echo "Testing apply_lock.sh script..." "$QUECMANAGER_DIR/apply_lock.sh" & PID=$! sleep 2 if kill -0 $PID 2>/dev/null; then echo "apply_lock.sh is running correctly" # Let it complete wait $PID else echo "WARNING: apply_lock.sh may have issues" fi # 6. Check if log file is being created if [ -f "/tmp/log/cell_lock/cell_lock.log" ]; then echo "Log file exists. Last few entries:" tail -n 10 "/tmp/log/cell_lock/cell_lock.log" else echo "WARNING: Log file not found" fi