Loading
Rahmat S. Masror

MSCS, BBA, DIT, MCSE, CCNA, COM TIA+

IT Expert

Freelancer

IT Consultant

Server/Database Expert

3CX Advanced Certified Engineer

Rahmat S. Masror

MSCS, BBA, DIT, MCSE, CCNA, COM TIA+

IT Expert

Freelancer

IT Consultant

Server/Database Expert

3CX Advanced Certified Engineer

Blog Post

Streamlined Linux Backup and Rotation Automation

October 24, 2024 UNIX/LINUX
Streamlined Linux Backup and Rotation Automation

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!