Files
homelab-optimized/docker/monitoring/setup-backup-cron.sh
Gitea Mirror Bot fdb13d7d9c
Some checks failed
Documentation / Deploy to GitHub Pages (push) Has been cancelled
Documentation / Build Docusaurus (push) Has been cancelled
Sanitized mirror from private repository - 2026-03-21 11:18:19 UTC
2026-03-21 11:18:19 +00:00

156 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# Setup automated backups for Stoatchat
# This script configures a daily backup at 2 AM
set -e
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}
success() {
echo -e "${GREEN}$1${NC}"
}
# Check if running as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
STOATCHAT_DIR="/root/stoatchat"
BACKUP_SCRIPT="${STOATCHAT_DIR}/backup.sh"
# Check if backup script exists
if [ ! -f "$BACKUP_SCRIPT" ]; then
echo "❌ Backup script not found at $BACKUP_SCRIPT"
exit 1
fi
log "Setting up automated daily backups for Stoatchat..."
# Create cron job for daily backup at 2 AM
CRON_JOB="0 2 * * * $BACKUP_SCRIPT >> /var/log/stoatchat-backup.log 2>&1"
# Check if cron job already exists
if crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
log "Backup cron job already exists, updating..."
# Remove existing job and add new one
(crontab -l 2>/dev/null | grep -v "$BACKUP_SCRIPT"; echo "$CRON_JOB") | crontab -
else
log "Adding new backup cron job..."
# Add new cron job
(crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
fi
success "Daily backup scheduled for 2:00 AM"
# Create log rotation for backup logs
log "Setting up log rotation..."
cat > /etc/logrotate.d/stoatchat-backup << EOF
/var/log/stoatchat-backup.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 root root
}
EOF
success "Log rotation configured"
# Create backup monitoring script
log "Creating backup monitoring script..."
cat > "${STOATCHAT_DIR}/check-backup-health.sh" << 'EOF'
#!/bin/bash
# Check backup health and send alerts if needed
BACKUP_DIR="/root/stoatchat-backups"
ALERT_EMAIL="admin@example.com" # Change this to your email
MAX_AGE_HOURS=26 # Alert if no backup in last 26 hours
# Find the most recent backup
LATEST_BACKUP=$(find "$BACKUP_DIR" -name "stoatchat_backup_*.tar.gz" -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -d' ' -f2-)
if [ -z "$LATEST_BACKUP" ]; then
echo "❌ No backups found in $BACKUP_DIR"
exit 1
fi
# Check age of latest backup
BACKUP_AGE=$(find "$LATEST_BACKUP" -mtime +1 | wc -l)
if [ "$BACKUP_AGE" -gt 0 ]; then
echo "⚠️ Latest backup is older than 24 hours: $LATEST_BACKUP"
echo "Backup age: $(stat -c %y "$LATEST_BACKUP")"
exit 1
else
echo "✅ Backup is current: $LATEST_BACKUP"
echo "Backup size: $(du -h "$LATEST_BACKUP" | cut -f1)"
echo "Backup date: $(stat -c %y "$LATEST_BACKUP")"
fi
# Check backup integrity
if tar -tzf "$LATEST_BACKUP" >/dev/null 2>&1; then
echo "✅ Backup integrity verified"
else
echo "❌ Backup integrity check failed!"
exit 1
fi
# Check disk space
DISK_USAGE=$(df "$BACKUP_DIR" | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USAGE" -gt 80 ]; then
echo "⚠️ Disk usage is high: ${DISK_USAGE}%"
echo "Consider cleaning old backups or expanding storage"
fi
echo "✅ Backup health check completed successfully"
EOF
chmod +x "${STOATCHAT_DIR}/check-backup-health.sh"
success "Backup monitoring script created"
# Add weekly backup health check
HEALTH_CRON_JOB="0 8 * * 1 ${STOATCHAT_DIR}/check-backup-health.sh >> /var/log/stoatchat-backup-health.log 2>&1"
if ! crontab -l 2>/dev/null | grep -q "check-backup-health.sh"; then
(crontab -l 2>/dev/null; echo "$HEALTH_CRON_JOB") | crontab -
success "Weekly backup health check scheduled for Mondays at 8:00 AM"
fi
# Show current cron jobs
log "Current backup-related cron jobs:"
crontab -l | grep -E "(backup|stoatchat)" || echo "No backup cron jobs found"
echo
echo "=================================================="
echo -e "${GREEN}🎉 AUTOMATED BACKUP SETUP COMPLETE! 🎉${NC}"
echo "=================================================="
echo "✅ Daily backup scheduled for 2:00 AM"
echo "✅ Weekly health check scheduled for Mondays at 8:00 AM"
echo "✅ Log rotation configured"
echo "✅ Backup monitoring script created"
echo
echo "Backup locations:"
echo " 📁 Backups: /root/stoatchat-backups/"
echo " 📄 Logs: /var/log/stoatchat-backup.log"
echo " 📄 Health logs: /var/log/stoatchat-backup-health.log"
echo
echo "Manual commands:"
echo " 🔧 Run backup now: $BACKUP_SCRIPT"
echo " 🔍 Check backup health: ${STOATCHAT_DIR}/check-backup-health.sh"
echo " 📋 View cron jobs: crontab -l"
echo " 📄 View backup logs: tail -f /var/log/stoatchat-backup.log"
echo
echo "Setup completed at: $(date)"
echo "=================================================="