Bash Script for downliading Apache Log files

Submitted by admin on
# Mandatory Settings
SSH_HOST="user@your-server.com"
REMOTE_PATH="/var/log/apache2"

# Optional/Default Settings
LOCAL_DEST="."
# This folder is where logs will be moved after compression
ARCHIVE_DIR="./archive"
LOG_FILE_NAME="access-$(date +%Y-%m-%d).log"#!/bin/bash

ENV_FILE=".env"

# 1. Check if .env file exists
if [ ! -f "$ENV_FILE" ]; then
    echo "Error: .env file not found."
    exit 1
fi

# 2. Load environment variables
set -a
source "$ENV_FILE"
set +a

# 3. Validate mandatory variables (including the new ARCHIVE_DIR)
REQUIRED_VARS=("SSH_HOST" "REMOTE_PATH" "LOCAL_DEST" "LOG_FILE_NAME" "ARCHIVE_DIR")
for var in "${REQUIRED_VARS[@]}"; do
    if [ -z "${!var}" ]; then
        echo "Error: Environment variable $var is missing."
        exit 1
    fi
done

# 4. Prepare Paths
FULL_REMOTE_SOURCE="${SSH_HOST}:${REMOTE_PATH%/}/${LOG_FILE_NAME}"
mkdir -p "$ARCHIVE_DIR" # Ensure the archive folder exists

echo "------------------------------------------------"
echo "Phase 1: Downloading $LOG_FILE_NAME..."
rsync -avz "$FULL_REMOTE_SOURCE" "$LOCAL_DEST"

# 5. Check rsync status and start Rotation/Compression
if [ $? -eq 0 ]; then
    echo "------------------------------------------------"
    echo "Phase 2: Rotating and Compressing..."
    
    # Path to the file just downloaded
    DOWNLOADED_FILE="${LOCAL_DEST%/}/${LOG_FILE_NAME}"
    
    # Compress the file (gzip replaces the original with .gz)
    gzip -f "$DOWNLOADED_FILE"
    
    # Move the compressed file to the archive directory
    mv "${DOWNLOADED_FILE}.gz" "$ARCHIVE_DIR/"
    
    echo "Success!"
    echo "Log archived to: $ARCHIVE_DIR/${LOG_FILE_NAME}.gz"
    echo "------------------------------------------------"
else
    echo "------------------------------------------------"
    echo "Error: Transfer failed. Rotation skipped."
    exit 1
fi	

 

 

# Mandatory Settings
SSH_HOST="user@your-server.com"
REMOTE_PATH="/var/log/apache2"
# Optional/Default Settings
LOCAL_DEST="."
# This folder is where logs will be moved after compression
ARCHIVE_DIR="./archive"
LOG_FILE_NAME="access-$(date +%Y-%m-%d).log"

Recent content