QuecManager non-beta
Its about time I did this!
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Script to update crontab entries for cell lock scheduling
|
||||
|
||||
# Configuration
|
||||
UCI_CONFIG="quecmanager"
|
||||
LOG_DIR="/tmp/log/cell_lock"
|
||||
LOG_FILE="$LOG_DIR/cell_lock.log"
|
||||
SCRIPTS_DIR="/www/cgi-bin/quecmanager/cell-locking"
|
||||
LOCK_SCRIPT="$SCRIPTS_DIR/apply_lock.sh"
|
||||
UNLOCK_SCRIPT="$SCRIPTS_DIR/remove_lock.sh"
|
||||
TEMP_CRONTAB="/tmp/cell_lock_crontab"
|
||||
ROTATE_SIZE=500 # KB before log rotation
|
||||
|
||||
# Ensure log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Enhanced log_message function
|
||||
log_message() {
|
||||
local message="$1"
|
||||
local level="${2:-info}"
|
||||
local component="update_crontab"
|
||||
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
|
||||
local pid=$$
|
||||
|
||||
# Check if log file is too large (>500KB) and rotate if needed
|
||||
if [ -f "$LOG_FILE" ] && [ $(du -k "$LOG_FILE" | cut -f1) -gt $ROTATE_SIZE ]; then
|
||||
mv "$LOG_FILE" "$LOG_FILE.old"
|
||||
touch "$LOG_FILE"
|
||||
chmod 644 "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Format: [timestamp] [level] [component] [pid] message
|
||||
echo "[$timestamp] [$level] [$component] [$pid] $message" >> "$LOG_FILE"
|
||||
|
||||
# Also log to system log with appropriate priority
|
||||
case "$level" in
|
||||
debug) logger -t "cell_lock_$component" -p daemon.debug "$message" ;;
|
||||
info) logger -t "cell_lock_$component" -p daemon.info "$message" ;;
|
||||
notice) logger -t "cell_lock_$component" -p daemon.notice "$message" ;;
|
||||
warn) logger -t "cell_lock_$component" -p daemon.warning "$message" ;;
|
||||
error) logger -t "cell_lock_$component" -p daemon.err "$message" ;;
|
||||
crit) logger -t "cell_lock_$component" -p daemon.crit "$message" ;;
|
||||
*) logger -t "cell_lock_$component" -p daemon.info "$message" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to update crontab
|
||||
update_crontab() {
|
||||
log_message "Starting crontab update process" "info"
|
||||
|
||||
local enabled=$(uci -q get "$UCI_CONFIG.cell_lock.enabled")
|
||||
|
||||
# Create a clean temporary crontab file
|
||||
crontab -l | grep -v "$SCRIPTS_DIR/" > "$TEMP_CRONTAB" 2>/dev/null
|
||||
|
||||
if [ "$enabled" = "1" ]; then
|
||||
local start_time=$(uci -q get "$UCI_CONFIG.cell_lock.start_time")
|
||||
local end_time=$(uci -q get "$UCI_CONFIG.cell_lock.end_time")
|
||||
|
||||
if [ -z "$start_time" ] || [ -z "$end_time" ]; then
|
||||
log_message "Missing start or end time in configuration" "error"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_message "Scheduling cell locks with start=$start_time, end=$end_time" "info"
|
||||
|
||||
local start_hour=$(echo "$start_time" | cut -d':' -f1)
|
||||
local start_minute=$(echo "$start_time" | cut -d':' -f2)
|
||||
local end_hour=$(echo "$end_time" | cut -d':' -f1)
|
||||
local end_minute=$(echo "$end_time" | cut -d':' -f2)
|
||||
|
||||
# Remove leading zeros
|
||||
start_hour=$(echo "$start_hour" | sed 's/^0//')
|
||||
start_minute=$(echo "$start_minute" | sed 's/^0//')
|
||||
end_hour=$(echo "$end_hour" | sed 's/^0//')
|
||||
end_minute=$(echo "$end_minute" | sed 's/^0//')
|
||||
|
||||
# Add crontab entries for lock and unlock
|
||||
log_message "Adding crontab entry for start time: $start_minute $start_hour * * *" "debug"
|
||||
echo "$start_minute $start_hour * * * $LOCK_SCRIPT" >> "$TEMP_CRONTAB"
|
||||
|
||||
log_message "Adding crontab entry for end time: $end_minute $end_hour * * *" "debug"
|
||||
echo "$end_minute $end_hour * * * $UNLOCK_SCRIPT" >> "$TEMP_CRONTAB"
|
||||
|
||||
log_message "Added crontab entries for start time ($start_time) and end time ($end_time)" "info"
|
||||
else
|
||||
log_message "Cell lock scheduling is disabled, removing crontab entries" "info"
|
||||
fi
|
||||
|
||||
# Apply the new crontab
|
||||
log_message "Applying updated crontab" "debug"
|
||||
crontab "$TEMP_CRONTAB"
|
||||
local crontab_status=$?
|
||||
|
||||
if [ $crontab_status -eq 0 ]; then
|
||||
log_message "Crontab updated successfully" "info"
|
||||
else
|
||||
log_message "Failed to update crontab (status: $crontab_status)" "error"
|
||||
fi
|
||||
|
||||
# Clean up
|
||||
rm -f "$TEMP_CRONTAB"
|
||||
|
||||
return $crontab_status
|
||||
}
|
||||
|
||||
# Execute the function
|
||||
log_message "====== STARTING CRONTAB UPDATE ======" "notice"
|
||||
update_crontab
|
||||
log_message "====== COMPLETED CRONTAB UPDATE ======" "notice"
|
||||
Reference in New Issue
Block a user