Files
office_translator/scripts/install-crontab.sh
sepehr 3f980ad537
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
feat: add NAS backup, verification, and DR scripts
2026-06-07 11:12:01 +02:00

74 lines
2.8 KiB
Bash

#!/bin/bash
# ==============================================================================
# Wordly.art - Install Backup Crontab
# ==============================================================================
# Run ONCE to install all scheduled backup tasks.
#
# Usage:
# bash scripts/install-crontab.sh
# ==============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CRONTAB_FILE="${SCRIPT_DIR}/crontab.wordly"
LOG_DIR="/var/log"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log() { echo "[Crontab] $1"; }
log_success() { echo -e "[Crontab] ${GREEN}$1${NC}"; }
log_warning() { echo -e "[Crontab] ${YELLOW}⚠️ $1${NC}"; }
# ==============================================================================
# 1. Create the crontab file
# ==============================================================================
cat > "${CRONTAB_FILE}" <<EOF
# ==============================================================================
# Wordly.art — Backup & Disaster Recovery Crontab
# Installed by: bash scripts/install-crontab.sh
# ==============================================================================
# Backup to NAS every 6 hours (00:00, 06:00, 12:00, 18:00)
0 */6 * * * bash ${SCRIPT_DIR}/backup-to-nas.sh >> ${LOG_DIR}/wordly-backup.log 2>&1
# Verify backup integrity 30 minutes after each backup
30 */6 * * * bash ${SCRIPT_DIR}/verify-backups.sh >> ${LOG_DIR}/wordly-verify.log 2>&1
# Rotate logs weekly (keep last 30 days)
0 4 * * 0 find ${LOG_DIR} -name "wordly-*.log" -mtime +30 -delete 2>/dev/null || true
EOF
log_success "Crontab file created: ${CRONTAB_FILE}"
# ==============================================================================
# 2. Install crontab for current user
# ==============================================================================
log "Installing crontab..."
# Preserve existing crontab (if any), append new entries
EXISTING_CRON=$(crontab -l 2>/dev/null || true)
# Remove any existing wordly entries (to avoid duplicates on re-run)
EXISTING_CRON_CLEAN=$(echo "${EXISTING_CRON}" | grep -v "wordly" | grep -v "backup-to-nas" | grep -v "verify-backups" || true)
# Combine
NEW_CRON=$(printf "%s\n%s\n" "${EXISTING_CRON_CLEAN}" "$(cat "${CRONTAB_FILE}")")
echo "${NEW_CRON}" | crontab -
log_success "Crontab installed!"
echo ""
log "Current crontab:"
crontab -l | grep -E "wordly|backup|verify" | sed 's/^/ /'
echo ""
log_success "Scheduled jobs:"
log_success " Every 6h (00:00/06:00/12:00/18:00) → backup-to-nas.sh"
log_success " Every 6h+30min → verify-backups.sh"
log_success " Every Sunday at 04:00 → log rotation"
echo ""
log_warning "Logs will be written to:"
log_warning " ${LOG_DIR}/wordly-backup.log"
log_warning " ${LOG_DIR}/wordly-verify.log"