43 lines
1.1 KiB
Django/Jinja
43 lines
1.1 KiB
Django/Jinja
#!/bin/bash
|
|
# System configuration backup script
|
|
# Generated by Ansible
|
|
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_DIR="/opt/backups/system"
|
|
LOG_FILE="/var/log/backups/system.log"
|
|
|
|
echo "$(date): Starting system backup" >> "$LOG_FILE"
|
|
|
|
# Create backup directory
|
|
mkdir -p "$BACKUP_DIR/$DATE"
|
|
|
|
# Backup important system directories
|
|
for dir in /etc /var/lib/dpkg /var/lib/apt/extended_states; do
|
|
if [ -d "$dir" ]; then
|
|
echo "$(date): Backing up $dir" >> "$LOG_FILE"
|
|
rsync -av "$dir" "$BACKUP_DIR/$DATE/" >> "$LOG_FILE" 2>&1
|
|
fi
|
|
done
|
|
|
|
# Backup crontabs
|
|
if [ -d /var/spool/cron/crontabs ]; then
|
|
cp -r /var/spool/cron/crontabs "$BACKUP_DIR/$DATE/"
|
|
fi
|
|
|
|
# Create system info snapshot
|
|
{
|
|
echo "=== System Info ==="
|
|
uname -a
|
|
lsb_release -a 2>/dev/null
|
|
echo ""
|
|
echo "=== Installed Packages ==="
|
|
dpkg --get-selections
|
|
echo ""
|
|
echo "=== Services ==="
|
|
systemctl list-unit-files --type=service --state=enabled
|
|
} > "$BACKUP_DIR/$DATE/system-info.txt"
|
|
|
|
# Keep only last 30 days of system backups
|
|
find "$BACKUP_DIR" -type d -name "20*" -mtime +30 -exec rm -rf {} \; 2>/dev/null
|
|
|
|
echo "$(date): System backup completed" >> "$LOG_FILE" |