← back to Watches

scripts/setup-cron-jobs.sh

88 lines

#!/bin/bash

###############################################################################
# Setup Automated Cron Jobs for Omega Watch Price History
###############################################################################

set -euo pipefail

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

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

PROJECT_DIR="/root/Projects/watches"

log "Setting up cron jobs..."

# Create cron job entries
CRON_ENTRIES="
# Omega Watch Price History - Automated Tasks

# Daily backup at 2:00 AM
0 2 * * * ${PROJECT_DIR}/scripts/backup-system.sh backup >> ${PROJECT_DIR}/logs/backup-cron.log 2>&1

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

# Monthly backup on the 1st at 4:00 AM
0 4 1 * * ${PROJECT_DIR}/scripts/backup-system.sh monthly >> ${PROJECT_DIR}/logs/backup-cron.log 2>&1

# Rotate old backups daily at 5:00 AM
0 5 * * * ${PROJECT_DIR}/scripts/backup-system.sh rotate >> ${PROJECT_DIR}/logs/backup-cron.log 2>&1

# Clean old logs every week (keep last 30 days)
0 6 * * 0 find ${PROJECT_DIR}/logs -name '*.log' -mtime +30 -delete

# Health check every hour (optional - health monitor runs continuously)
# 0 * * * * curl -s http://localhost:7600/api/health > /dev/null || echo \"\$(date): Health check failed\" >> ${PROJECT_DIR}/logs/health-alerts.log

# PM2 save every 6 hours (backup process list)
0 */6 * * * pm2 save >> ${PROJECT_DIR}/logs/pm2-save.log 2>&1

# Analytics report generation (if you add this feature)
# 0 1 * * * node ${PROJECT_DIR}/analytics/generate-daily-report.js >> ${PROJECT_DIR}/logs/analytics-cron.log 2>&1
"

# Backup existing crontab
log "Backing up existing crontab..."
crontab -l > "${PROJECT_DIR}/logs/crontab-backup-$(date +%Y%m%d_%H%M%S).txt" 2>/dev/null || true

# Check if entries already exist
if crontab -l 2>/dev/null | grep -q "Omega Watch Price History"; then
    log "⚠️  Cron jobs already configured"
    echo ""
    echo "Current cron jobs:"
    crontab -l | grep -A 20 "Omega Watch Price History" || true
    echo ""
    read -p "Do you want to replace them? (y/n) " -n 1 -r
    echo ""
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log "Keeping existing cron jobs"
        exit 0
    fi

    # Remove old entries
    log "Removing old cron jobs..."
    crontab -l | grep -v "Omega Watch Price History" | grep -v "${PROJECT_DIR}" | crontab -
fi

# Add new entries
log "Adding new cron jobs..."
(crontab -l 2>/dev/null || true; echo "${CRON_ENTRIES}") | crontab -

log "✓ Cron jobs configured successfully"
echo ""
echo "=========================================="
echo "Scheduled Tasks:"
echo "=========================================="
crontab -l | grep -A 20 "Omega Watch Price History" || true
echo "=========================================="
echo ""
log "Cron logs will be saved to: ${PROJECT_DIR}/logs/"
log "To view cron jobs: crontab -l"
log "To edit cron jobs: crontab -e"