Sanitized mirror from private repository - 2026-03-24 12:51:03 UTC
This commit is contained in:
155
docker/monitoring/setup-backup-cron.sh
Executable file
155
docker/monitoring/setup-backup-cron.sh
Executable file
@@ -0,0 +1,155 @@
|
||||
#!/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 "=================================================="
|
||||
Reference in New Issue
Block a user