mirror of
https://github.com/acedanger/shell.git
synced 2025-12-06 04:30:13 -08:00
feat: Implement crontab recovery and management scripts with enhanced logging and system-specific entries
This commit is contained in:
141
fix-crontab-merging.sh
Executable file
141
fix-crontab-merging.sh
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Crontab Recovery Script
|
||||
# This script fixes the crontab merging issue by restoring system-specific entries
|
||||
|
||||
set -e
|
||||
|
||||
# Color codes for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||
HOSTNAME=$(hostname)
|
||||
|
||||
log_message() {
|
||||
echo -e "$(date '+%H:%M:%S') $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
log_message "${RED}ERROR: $1${NC}"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
log_message "${GREEN}SUCCESS: $1${NC}"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
log_message "${YELLOW}WARNING: $1${NC}"
|
||||
}
|
||||
|
||||
log_info() {
|
||||
log_message "${BLUE}INFO: $1${NC}"
|
||||
}
|
||||
|
||||
show_current_problem() {
|
||||
log_info "Current crontab merging issue analysis:"
|
||||
echo
|
||||
|
||||
log_info "Current root crontab on $HOSTNAME:"
|
||||
sudo crontab -l 2>/dev/null || log_warning "No crontab found"
|
||||
echo
|
||||
|
||||
case "$HOSTNAME" in
|
||||
"europa")
|
||||
log_info "Europa should have:"
|
||||
echo " - move-backups.sh (pulls files FROM racknerd)"
|
||||
echo " - backup-plex.sh (backs up Plex)"
|
||||
echo " - validate-plex-backups.sh (validates backups)"
|
||||
echo " - Immich database backup move"
|
||||
echo " - Weekly Plex reports"
|
||||
;;
|
||||
"racknerd")
|
||||
log_info "Racknerd should have:"
|
||||
echo " - backup-docker.sh (backs up Docker containers)"
|
||||
echo " - NO move-backups.sh (that's Europa's job)"
|
||||
echo " - NO Plex-related jobs (Plex runs on Europa)"
|
||||
;;
|
||||
*)
|
||||
log_warning "Unknown hostname: $HOSTNAME"
|
||||
;;
|
||||
esac
|
||||
echo
|
||||
}
|
||||
|
||||
fix_crontab() {
|
||||
local system_name="$1"
|
||||
local crontab_file="$SCRIPT_DIR/enhanced-crontab-${system_name}.txt"
|
||||
|
||||
if [ ! -f "$crontab_file" ]; then
|
||||
log_error "System-specific crontab file not found: $crontab_file"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_info "Creating backup before fixing crontab"
|
||||
if [ -f "$SCRIPT_DIR/crontab-backup-system.sh" ]; then
|
||||
"$SCRIPT_DIR/crontab-backup-system.sh" backup "pre-fix"
|
||||
fi
|
||||
|
||||
log_info "Installing correct crontab for $system_name"
|
||||
|
||||
# Extract just the cron entries (skip comments and empty lines)
|
||||
grep -E '^[0-9]' "$crontab_file" > /tmp/cron_entries_fix.txt
|
||||
|
||||
if sudo crontab /tmp/cron_entries_fix.txt; then
|
||||
log_success "Correct crontab installed for $system_name"
|
||||
rm -f /tmp/cron_entries_fix.txt
|
||||
|
||||
# Create a post-fix backup
|
||||
if [ -f "$SCRIPT_DIR/crontab-backup-system.sh" ]; then
|
||||
"$SCRIPT_DIR/crontab-backup-system.sh" backup "post-fix"
|
||||
fi
|
||||
|
||||
log_info "New crontab contents:"
|
||||
sudo crontab -l
|
||||
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to install correct crontab"
|
||||
rm -f /tmp/cron_entries_fix.txt
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
log_info "=== Crontab Recovery Script ==="
|
||||
log_info "System: $HOSTNAME"
|
||||
echo
|
||||
|
||||
show_current_problem
|
||||
|
||||
case "$HOSTNAME" in
|
||||
"europa")
|
||||
log_info "Fixing crontab for Europa (media server)"
|
||||
fix_crontab "europa"
|
||||
;;
|
||||
"racknerd")
|
||||
log_info "Fixing crontab for Racknerd (backup server)"
|
||||
fix_crontab "racknerd"
|
||||
;;
|
||||
*)
|
||||
log_error "Unknown system: $HOSTNAME"
|
||||
log_info "This script supports: europa, racknerd"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo
|
||||
log_success "Crontab recovery completed for $HOSTNAME"
|
||||
log_info "The enhanced management script now uses system-specific files:"
|
||||
log_info " - enhanced-crontab-europa.txt"
|
||||
log_info " - enhanced-crontab-racknerd.txt"
|
||||
echo
|
||||
log_info "To manage crontabs going forward, use:"
|
||||
log_info " ./manage-enhanced-crontab.sh install"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user