small fix / now tested working

This commit is contained in:
Radek
2025-02-25 10:18:02 +00:00
parent c5c55e156f
commit 042f0871d2
5 changed files with 91 additions and 9 deletions

View File

@@ -4,29 +4,34 @@
cd /opt/AZURE || exit 1
# Configurable variables
BUSINESS_HOURS_START=9
# Basic variables need for this scrip[t to operate correctly.
BUSINESS_HOURS_START=10
BUSINESS_HOURS_END=20
AZURE_ACCOUNT=""
AZURE_SAS=""
LOCK_FILE="/tmp/run_azcopy.lock"
# Arguments
# From the comand line. the first is mandatory. There is a check for it if its not provided.
SOURCE_LIST_FILE="$1"
LOGGING="${2:-false}" # Default to false
BANDWIDTH_CAP="${3:-0}" # Default is 0 (no cap)
# Report files
# A bunch of temp files used to generate logs and a simple completion report.
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
LOG_FILE="azcopy_log_$TIMESTAMP.txt"
COMPLETION_REPORT="completion_report_$TIMESTAMP.txt"
# Ensure source list file is provided
# This the check for source files no ne3ed to run if that is not present.
if [[ -z "$SOURCE_LIST_FILE" || ! -f "$SOURCE_LIST_FILE" ]]; then
echo "Usage: $0 <directory_list_file> [log=true|false] [bandwidth_mbps]"
exit 1
fi
# Lock file to prevent multiple instances
# Part of checks to prevent doubling of running proccesses.
if [[ -f "$LOCK_FILE" ]]; then
PID=$(cat "$LOCK_FILE")
if kill -0 "$PID" 2>/dev/null; then
@@ -40,12 +45,15 @@ fi
echo $$ > "$LOCK_FILE"
# Function to check business hours
# This will ensure we do not run at times when the server might need to do other things.
is_business_hours() {
HOUR=$(printf "%d" "$(date +%H)") # Convert to decimal safely
HOUR=$(date +%H | sed 's/^0*//') # Remove leading zeros causing errors at morning times
#HOUR=$(printf "%d" "$(date +%H)") # Convert to decimal safely / this had an issue for some reason not working
[[ $HOUR -ge $BUSINESS_HOURS_START && $HOUR -lt $BUSINESS_HOURS_END ]]
}
# Stop if running during business hours
# Uses the previous funcion to kill the procces if needed.
if is_business_hours; then
echo "Business hours detected ($BUSINESS_HOURS_START:00 - $BUSINESS_HOURS_END:00). Exiting..."
rm -f "$LOCK_FILE"
@@ -55,9 +63,13 @@ fi
echo "Starting sync job at $(date)" | tee -a "$LOG_FILE"
# Read the directory list file into an array
# This is used like that becouse of how cron uses a seperate shell enviroment.
mapfile -t SYNC_JOBS < "$SOURCE_LIST_FILE"
# Loop through the array and process each entry
# The actual part of the script that does the job.
# Loops through the array and process each entry
# This also does a check to kill the process if it does not complete before the restriction window apply.
# Also checks if a given container exists will stop if it does not.
for LINE in "${SYNC_JOBS[@]}"; do
IFS=">" read -r SOURCE_DIR DEST_CONTAINER <<< "$LINE"
SOURCE_DIR=$(echo "$SOURCE_DIR" | xargs) # Trim spaces
@@ -90,7 +102,7 @@ for LINE in "${SYNC_JOBS[@]}"; do
fi
rm -f "$TEST_FILE"
# Run azcopy in the foreground (one directory at a time)
# Run azcopy in the background (one directory at a time)
if [[ "$LOGGING" == "true" ]]; then
azcopy sync "$SOURCE_DIR" "$DEST_URL?$AZURE_SAS" --recursive --cap-mbps "$BANDWIDTH_CAP" | tee -a "$LOG_FILE" &
else