Sistema di backup automatico per server Linux
Come configurare backup incrementali con rsync, schedulati via cron, con notifica e retention.
1. Backup base con rsync
# Backup locale
rsync -avz --delete /var/www/ /mnt/backup/www/
# Backup remoto via SSH
rsync -avz -e ssh /var/www/ root@192.168.1.90:/backup/www/
2. Script di backup completo
nano /usr/local/bin/backup.sh
#!/bin/bash
set -euo pipefail
DATE=$(date +%Y-%m-%d)
DEST="/mnt/backup"
LOG="/var/log/backup.log"
log() { echo "[$(date +%F %T)] $*" >> "$LOG"; }
log "Inizio backup"
# Backup file di sistema
rsync -avz --delete /etc/ "$DEST/etc/" >> "$LOG" 2>&1
rsync -avz --delete /var/www/ "$DEST/www/" >> "$LOG" 2>&1
# Dump MySQL
mysqldump -u root --all-databases | gzip > "$DEST/mysql/dump_${DATE}.sql.gz"
# Retention: elimina dump piu vecchi di 30 giorni
find "$DEST/mysql/" -name "*.sql.gz" -mtime +30 -delete
log "Backup completato"
chmod +x /usr/local/bin/backup.sh
3. Schedulazione con cron
crontab -e
# Backup giornaliero alle 3:00
0 3 * * * /usr/bin/flock -n /var/lock/backup.lock /usr/local/bin/backup.sh
flock impedisce esecuzioni sovrapposte.
4. Backup su NFS remoto
# Mount NFS
mount -t nfs 192.168.1.90:/share/backup /mnt/backup
# In fstab per mount automatico
echo "192.168.1.90:/share/backup /mnt/backup nfs defaults,_netdev 0 0" >> /etc/fstab
5. Notifica Telegram
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage"
-d chat_id="${CHAT_ID}" --data-urlencode text="$1"
}
send_telegram "Backup completato: $(du -sh $DEST | awk '{print $1}')"
Risultato: Backup automatici giornalieri con rsync, dump MySQL, retention e notifiche.