small fix / now tested working
This commit is contained in:
1
dir2sync_list
Normal file
1
dir2sync_list
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/opt/AZURE/BLOB > testcontainer115
|
||||||
11
notes
Normal file
11
notes
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
cron job using the users cron tab.
|
||||||
|
|
||||||
|
#0 * * * * /usr/bin/env bash -lc '/opt/AZURE/run_azcopy.sh /opt/AZURE/dir2sync_list true 20'
|
||||||
|
|
||||||
|
the baove runs every hour using a bash login shell this is needed so all VARIABLE expansions work correctly.
|
||||||
|
|
||||||
|
We run everything as the user no root.
|
||||||
|
|
||||||
|
there are checks and error hadling was created for some cases but motsliukly not all. So logs should be checked on a regular basis.
|
||||||
|
|
||||||
|
tested on a smal set of files.
|
||||||
@@ -4,29 +4,34 @@
|
|||||||
cd /opt/AZURE || exit 1
|
cd /opt/AZURE || exit 1
|
||||||
|
|
||||||
# Configurable variables
|
# Configurable variables
|
||||||
BUSINESS_HOURS_START=9
|
# Basic variables need for this scrip[t to operate correctly.
|
||||||
|
BUSINESS_HOURS_START=10
|
||||||
BUSINESS_HOURS_END=20
|
BUSINESS_HOURS_END=20
|
||||||
AZURE_ACCOUNT=""
|
AZURE_ACCOUNT=""
|
||||||
AZURE_SAS=""
|
AZURE_SAS=""
|
||||||
LOCK_FILE="/tmp/run_azcopy.lock"
|
LOCK_FILE="/tmp/run_azcopy.lock"
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
|
# From the comand line. the first is mandatory. There is a check for it if its not provided.
|
||||||
SOURCE_LIST_FILE="$1"
|
SOURCE_LIST_FILE="$1"
|
||||||
LOGGING="${2:-false}" # Default to false
|
LOGGING="${2:-false}" # Default to false
|
||||||
BANDWIDTH_CAP="${3:-0}" # Default is 0 (no cap)
|
BANDWIDTH_CAP="${3:-0}" # Default is 0 (no cap)
|
||||||
|
|
||||||
# Report files
|
# Report files
|
||||||
|
# A bunch of temp files used to generate logs and a simple completion report.
|
||||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||||
LOG_FILE="azcopy_log_$TIMESTAMP.txt"
|
LOG_FILE="azcopy_log_$TIMESTAMP.txt"
|
||||||
COMPLETION_REPORT="completion_report_$TIMESTAMP.txt"
|
COMPLETION_REPORT="completion_report_$TIMESTAMP.txt"
|
||||||
|
|
||||||
# Ensure source list file is provided
|
# 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
|
if [[ -z "$SOURCE_LIST_FILE" || ! -f "$SOURCE_LIST_FILE" ]]; then
|
||||||
echo "Usage: $0 <directory_list_file> [log=true|false] [bandwidth_mbps]"
|
echo "Usage: $0 <directory_list_file> [log=true|false] [bandwidth_mbps]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Lock file to prevent multiple instances
|
# Lock file to prevent multiple instances
|
||||||
|
# Part of checks to prevent doubling of running proccesses.
|
||||||
if [[ -f "$LOCK_FILE" ]]; then
|
if [[ -f "$LOCK_FILE" ]]; then
|
||||||
PID=$(cat "$LOCK_FILE")
|
PID=$(cat "$LOCK_FILE")
|
||||||
if kill -0 "$PID" 2>/dev/null; then
|
if kill -0 "$PID" 2>/dev/null; then
|
||||||
@@ -40,12 +45,15 @@ fi
|
|||||||
echo $$ > "$LOCK_FILE"
|
echo $$ > "$LOCK_FILE"
|
||||||
|
|
||||||
# Function to check business hours
|
# 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() {
|
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 ]]
|
[[ $HOUR -ge $BUSINESS_HOURS_START && $HOUR -lt $BUSINESS_HOURS_END ]]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Stop if running during business hours
|
# Stop if running during business hours
|
||||||
|
# Uses the previous funcion to kill the procces if needed.
|
||||||
if is_business_hours; then
|
if is_business_hours; then
|
||||||
echo "Business hours detected ($BUSINESS_HOURS_START:00 - $BUSINESS_HOURS_END:00). Exiting..."
|
echo "Business hours detected ($BUSINESS_HOURS_START:00 - $BUSINESS_HOURS_END:00). Exiting..."
|
||||||
rm -f "$LOCK_FILE"
|
rm -f "$LOCK_FILE"
|
||||||
@@ -55,9 +63,13 @@ fi
|
|||||||
echo "Starting sync job at $(date)" | tee -a "$LOG_FILE"
|
echo "Starting sync job at $(date)" | tee -a "$LOG_FILE"
|
||||||
|
|
||||||
# Read the directory list file into an array
|
# 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"
|
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
|
for LINE in "${SYNC_JOBS[@]}"; do
|
||||||
IFS=">" read -r SOURCE_DIR DEST_CONTAINER <<< "$LINE"
|
IFS=">" read -r SOURCE_DIR DEST_CONTAINER <<< "$LINE"
|
||||||
SOURCE_DIR=$(echo "$SOURCE_DIR" | xargs) # Trim spaces
|
SOURCE_DIR=$(echo "$SOURCE_DIR" | xargs) # Trim spaces
|
||||||
@@ -90,7 +102,7 @@ for LINE in "${SYNC_JOBS[@]}"; do
|
|||||||
fi
|
fi
|
||||||
rm -f "$TEST_FILE"
|
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
|
if [[ "$LOGGING" == "true" ]]; then
|
||||||
azcopy sync "$SOURCE_DIR" "$DEST_URL?$AZURE_SAS" --recursive --cap-mbps "$BANDWIDTH_CAP" | tee -a "$LOG_FILE" &
|
azcopy sync "$SOURCE_DIR" "$DEST_URL?$AZURE_SAS" --recursive --cap-mbps "$BANDWIDTH_CAP" | tee -a "$LOG_FILE" &
|
||||||
else
|
else
|
||||||
|
|||||||
55
run_azcopy-rotae-log
Normal file
55
run_azcopy-rotae-log
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
##Log rotate
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# /etc/logrotate.d/azure_logs
|
||||||
|
|
||||||
|
/opt/AZURE/*.txt {
|
||||||
|
weekly
|
||||||
|
missingok
|
||||||
|
rotate 4
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
|
notifempty
|
||||||
|
create 0644 root root
|
||||||
|
}
|
||||||
|
|
||||||
|
~/.azcopy/*.log {
|
||||||
|
weekly
|
||||||
|
missingok
|
||||||
|
rotate 4
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
|
notifempty
|
||||||
|
create 0644 root root
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Explanation:
|
||||||
|
- **weekly**: Rotate the logs on a weekly basis.
|
||||||
|
- **missingok**: If the log file is missing, go on to the next one without issuing an error message.
|
||||||
|
- **rotate 4**: Keep only the last 4 weeks of logs.
|
||||||
|
- **compress**: Compress the rotated logs using gzip.
|
||||||
|
- **delaycompress**: Delay compression until the next rotation cycle. This means the current log file will not be compressed immediately after rotation, but the previous log files will be.
|
||||||
|
- **notifempty**: Do not rotate the log if it is empty.
|
||||||
|
- **create 0644 root root**: Create new log files with owner `root` and group `root`, and permissions `0644`.
|
||||||
|
|
||||||
|
### Steps to Apply the Configuration:
|
||||||
|
1. Save the above configuration in `/etc/logrotate.d/azure_logs`.
|
||||||
|
2. Ensure that the `logrotate` service is enabled and running on your system.
|
||||||
|
3. Test the logrotate configuration with the following command to ensure there are no syntax errors:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo logrotate -d /etc/logrotate.d/azure_logs
|
||||||
|
```
|
||||||
|
|
||||||
|
The `-d` option runs logrotate in debug mode, which will show you what actions would be taken without actually performing them.
|
||||||
|
|
||||||
|
4. If everything looks good, you can force a rotation to test it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo logrotate -f /etc/logrotate.d/azure_logs
|
||||||
|
```
|
||||||
|
|
||||||
|
This will rotate the logs immediately according to the specified configuration.
|
||||||
|
|
||||||
|
By following these steps, your logs in `/opt/AZURE` and `~/.azcopy` should be rotated weekly, compressed, and kept for only the last 4 weeks.
|
||||||
@@ -1,15 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Enter the specific 'work directory'Ensure we collect logs and other files in the one place.
|
||||||
|
cd /opt/AZURE || exit 1
|
||||||
|
|
||||||
# Configurable variables
|
# Configurable variables
|
||||||
BUSINESS_HOURS_START=7
|
BUSINESS_HOURS_START=9
|
||||||
BUSINESS_HOURS_END=15
|
BUSINESS_HOURS_END=20
|
||||||
AZURE_URL="https://<>.core.windows.net/<container>"
|
AZURE_URL=""
|
||||||
AZURE_SAS="<add key here>"
|
AZURE_SAS=""
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
SOURCE_DIR="$1"
|
SOURCE_DIR="$1"
|
||||||
LOGGING="${2:-false}" # Default to no logs
|
LOGGING="${2:-false}" # Default to no logs
|
||||||
BANDWIDTH_CAP="${3:-0}" # Default is 0 (no cap)
|
BANDWIDTH_CAP="${3:-0}" # Default is 0 (no bw limit)
|
||||||
|
|
||||||
# Report files
|
# Report files
|
||||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||||
|
|||||||
Reference in New Issue
Block a user