← back to Watches

scripts/cron-setup.sh

126 lines

#!/bin/bash

################################################################################
# OMEGA WATCHES - CRON JOBS SETUP
# Configures automated backups and health checks
################################################################################

set -euo pipefail

GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m'

APP_DIR="/root/Projects/watches"

log() {
    echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}

log_info() {
    echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}

print_header() {
    echo -e "${BLUE}"
    echo "╔════════════════════════════════════════════════════════════════╗"
    echo "║        OMEGA WATCHES - CRON JOBS SETUP                         ║"
    echo "╚════════════════════════════════════════════════════════════════╝"
    echo -e "${NC}"
}

# Backup current crontab
backup_crontab() {
    log_info "Backing up current crontab..."

    crontab -l > /tmp/crontab.backup.$(date +%Y%m%d_%H%M%S) 2>/dev/null || true

    log "Crontab backed up ✓"
}

# Create cron jobs
create_cron_jobs() {
    log_info "Creating cron jobs..."

    # Get existing crontab or create empty
    crontab -l > /tmp/omega-cron.tmp 2>/dev/null || echo "" > /tmp/omega-cron.tmp

    # Remove existing omega-watches jobs
    sed -i '/omega-watches/d' /tmp/omega-cron.tmp
    sed -i '/backup-automation/d' /tmp/omega-cron.tmp

    # Add new jobs
    cat >> /tmp/omega-cron.tmp << EOF

# ============================================================================
# OMEGA WATCHES - Automated Tasks
# ============================================================================

# Daily backup at 2:00 AM
0 2 * * * $APP_DIR/scripts/backup-automation.sh daily >> $APP_DIR/logs/cron-backup.log 2>&1

# Weekly backup every Sunday at 3:00 AM
0 3 * * 0 $APP_DIR/scripts/backup-automation.sh weekly >> $APP_DIR/logs/cron-backup.log 2>&1

# Monthly backup on 1st of month at 4:00 AM
0 4 1 * * $APP_DIR/scripts/backup-automation.sh monthly >> $APP_DIR/logs/cron-backup.log 2>&1

# Health check every 5 minutes
*/5 * * * * curl -f http://localhost:7500/api/health > /dev/null 2>&1 || echo "Health check failed at \$(date)" >> $APP_DIR/logs/health-check.log

# Clean old logs every day at 1:00 AM (keep last 30 days)
0 1 * * * find $APP_DIR/logs -name "*.log" -mtime +30 -delete

# PM2 save every hour (backup PM2 process list)
0 * * * * pm2 save --force > /dev/null 2>&1

# Verify backups every Monday at 5:00 AM
0 5 * * 1 $APP_DIR/scripts/backup-automation.sh verify >> $APP_DIR/logs/cron-verify.log 2>&1

EOF

    # Install new crontab
    crontab /tmp/omega-cron.tmp

    # Cleanup
    rm -f /tmp/omega-cron.tmp

    log "Cron jobs created ✓"
}

# Display installed jobs
show_cron_jobs() {
    echo ""
    log "${GREEN}╔════════════════════════════════════════════════════════════════╗${NC}"
    log "${GREEN}║           CRON JOBS SETUP COMPLETE!                            ║${NC}"
    log "${GREEN}╚════════════════════════════════════════════════════════════════╝${NC}"
    echo ""
    log_info "Installed Cron Jobs:"
    echo ""
    crontab -l | grep -A 20 "OMEGA WATCHES"
    echo ""
    log_info "Log Files:"
    echo "  Backup logs:      $APP_DIR/logs/cron-backup.log"
    echo "  Health check:     $APP_DIR/logs/health-check.log"
    echo "  Verification:     $APP_DIR/logs/cron-verify.log"
    echo ""
    log_info "Useful Commands:"
    echo "  List cron jobs:   crontab -l"
    echo "  Edit cron jobs:   crontab -e"
    echo "  View logs:        tail -f $APP_DIR/logs/cron-*.log"
    echo ""
}

# Main function
main() {
    print_header

    backup_crontab
    create_cron_jobs
    show_cron_jobs
}

# Run main
main "$@"