Streamlined Linux Backup and Rotation Automation Print

  • #Linux #WebServer #BackupAutomation #ShellScripting #DataSecurit, Linux #WebServer #BackupAutomation #ShellScripting #DataSecurity, OpenSource, TechGuide, ScriptingTutorial, WebServer, DiskSpaceOptimization, ITInfrastructure, DataSecurity, ShellScripting, DataManagement, CronJobs, BackupAutomation, BackupSolutions, Linux, SystemAdministration, ServerManagement
  • 0

Mastering Automated Web Server Backups in Linux: An In-Depth Guide

The Challenge:
In the world of web server administration, safeguarding your data is crucial. While daily backups are essential, managing this task manually can quickly become a headache. This guide delves into a powerful solution using shell scripting to automate and enhance your backup process.

The Approach:


Overview:
I’ve developed a shell script that automates daily backups of vital directories. But there’s more!

This script not only creates backups but also intelligently manages them by retaining only a configurable number of copies and automatically removing older versions. This keeps disk space usage efficient without sacrificing data integrity.

Core Elements:


- **Configuration:** Define your backup destination, source directories, and the number of backup versions to keep.
- **Backup Creation:** Utilize the `tar` command to compress and archive selected directories.
- **Rotation Logic:** Automatically delete older backups to adhere to your specified limit.

The Script:


====================================================
#!/bin/bash

# Configuration
backup_dir="/var/backups/web_server"
source_dirs=("/var/www/html" "/etc/apache2")

# Number of backup copies to retain
num_backups_to_keep=7

# Create backup directory if it doesn't exist
mkdir -p "$backup_dir"

# Generate a unique backup filename with a timestamp
backup_file="$backup_dir/backup_$(date +%Y%m%d%H%M%S).tar.gz"

# Execute backup
tar -czvf "$backup_file" "${source_dirs[@]}"

# Cleanup: Remove old backups beyond the retention limit
num_backups=$(ls -1 "$backup_dir" | grep -c '^backup_')
num_backups_to_remove=$((num_backups - num_backups_to_keep))

if [ $num_backups_to_remove -gt 0 ]; then
# Identify and delete the oldest backups
old_backups=$(ls -1 "$backup_dir" | grep '^backup_' | sort | head -n $num_backups_to_remove)

for old_backup in $old_backups; do
rm "$backup_dir/$old_backup"
echo "Deleted old backup: $old_backup"
done
fi

echo "Backup completed successfully: $backup_file"
================================================

How It Works:


1. **Configuration:** Set your backup directory, source directories, and retention count.
2. **Create Backup Directory:** Ensure the backup directory exists; if not, create it.
3. **Generate Unique Filename:** Create a timestamped filename for each backup.
4. **Execute Backup:** Use `tar` to compress and archive the defined source directories.
5. **Cleanup Old Backups:** Check the number of existing backups and remove the excess to adhere to your retention policy.
6. **Success Message:** Notify the user of successful backup completion.

Getting Started:


1. Save the script as `backup_script.sh`.
2. Make it executable: `chmod +x backup_script.sh`.
3. Run the script: `./backup_script.sh`.

Automation:


Schedule the script to run daily using cron:
==========================
0 3 * * * /path/to/backup_script.sh
==========================


This example schedules the script to run daily at 3:00 AM.

The LinkedIn post introduces this effective approach to system maintenance, while this comprehensive Medium article provides a thorough exploration of the concept and the script itself.

Experience the satisfaction of mastering automation!

Dive into the code, customize it for your environment, and enhance your system’s resilience!


Was this answer helpful?

« Back