Welcome to the first edition of Task Automation Tuesday! Each week, we will share practical automation examples to make your life as a sysadmin easier. Whether you’re a seasoned pro or just starting out, these tips will help streamline your tasks and give you more time to focus on what matters. Today, we’re going to automate server updates using a Bash script with rollback functionality. Let’s dive in!

Why Automate Server Updates?

Regularly updating your server is crucial for security and performance. However, manually updating multiple servers can be time-consuming and error-prone. Automating this process ensures that your servers stay up-to-date with the latest security patches and updates, without you having to lift a finger. Adding rollback functionality ensures that if anything goes wrong, your servers can quickly revert to a previous state, minimizing downtime and disruption.

The Bash Script

Here’s a more advanced Bash script that automates the process of updating your server and includes rollback functionality. This script will:

  1. Update the package list.
  2. Upgrade all installed packages.
  3. Clean up any unnecessary files.
  4. Create a backup before updating.
  5. Roll back in case of failure.

Let’s take a look at the script:

#!/bin/bash

# Script to automate server updates with rollback on failure
# Author: Your Name

# Set variables
BACKUP_DIR="/backup"
LOG_FILE="/var/log/update_script.log"
DATE=$(date +"%Y%m%d%H%M")

# Function to log messages
log_message() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" | tee -a $LOG_FILE
}

# Function to create a backup
create_backup() {
log_message "Creating backup..."
tar -czf $BACKUP_DIR/backup_$DATE.tar.gz / --exclude=$BACKUP_DIR --exclude=/proc --exclude=/tmp --exclude=/mnt --exclude=/dev --exclude=/sys --exclude=/run
if [ $? -eq 0 ]; then
log_message "Backup created successfully."
else
log_message "Backup creation failed!"
exit 1
fi
}

# Function to perform system update
perform_update() {
log_message "Updating package list..."
sudo apt-get update
if [ $? -ne 0 ]; then
log_message "Failed to update package list."
return 1
fi

    log_message "Upgrading installed packages..."
    sudo apt-get upgrade -y
    if [ $? -ne 0 ]; then
        log_message "Failed to upgrade packages."
        return 1
    fi

    log_message "Cleaning up unnecessary files..."
    sudo apt-get autoremove -y
    sudo apt-get clean
    if [ $? -ne 0 ]; then
        log_message "Failed to clean up."
        return 1
    fi

    return 0
}

# Function to rollback in case of failure
rollback() {
log_message "Rolling back to previous state..."
tar -xzf $BACKUP_DIR/backup_$DATE.tar.gz -C /
if [ $? -eq 0 ]; then
log_message "Rollback completed successfully."
else
log_message "Rollback failed!"
fi
}

# Main script execution
log_message "Starting update process..."

create_backup
if perform_update; then
log_message "Update completed successfully."
else
log_message "Update failed. Initiating rollback..."
rollback
fi

log_message "Update script finished."

Step-by-Step Explanation

  1. Backup Creation: The script creates a compressed tarball of the server, excluding directories that don’t need to be backed up.

  2. Logging: The log_message function writes messages to a log file and to the console for easy monitoring.

  3. Update Process: The perform_update function attempts to update the package list, upgrade installed packages, and clean up unnecessary files. If any step fails, it returns a failure status.

  4. Rollback: If the update process fails, the rollback function restores the server from the backup created earlier.

  5. Main Script Execution: The main section of the script logs the start of the update process, creates a backup, performs the update, and handles any necessary rollback.

Running the Script

Follow these steps to run the script:

  1. Create the script file:
nano update_server_with_rollback.sh
  1. Copy the script: Copy the updated Bash script provided above and paste it into the update_server_with_rollback.sh file.

  2. Save and close the file: Save the file and exit the text editor (Ctrl+X, then Y, then Enter).

  3. Make the script executable: Make the script executable by running the following command:

chmod +x update_server_with_rollback.sh
  1. Run the script: Execute the script with the following command:
./update_server_with_rollback.sh

Automate with Cron

To automate this script, you can schedule it to run at regular intervals using cron jobs.

  1. Open the crontab editor:
crontab -e
  1. Add a new cron job: Add the following line to schedule the script to run every Sunday at 2 AM:
0 2 * * 0 /path/to/update_server_with_rollback.sh

Replace /path/to/update_server_with_rollback.sh with the actual path to your script.

Benefits of Automating Server Updates

  • Increased Security: Ensures that your servers are always up-to-date with the latest security patches.
  • Time Savings: Frees up your time to focus on more important tasks.
  • Consistency: Reduces the risk of human error and ensures that all servers are updated consistently.
  • Rollback Capability: Minimizes downtime by quickly reverting to a previous state if an update fails.

And there you have it! A more advanced way to automate server updates with rollback functionality using a Bash script. By implementing this automation, you can enhance your server security, save time, ensure consistency across your infrastructure, and minimize downtime. Stay tuned for more exciting automation tips next Tuesday!

Happy Automating! 🎉