76 lines
1.6 KiB
Bash
Executable File
76 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: $0 <config_file.env>"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f "$1" ]; then
|
|
. "$1"
|
|
else
|
|
echo "Error: Config file $1 not found!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$SOURCE" ]; then
|
|
curl -u "$AUTH" -H "Priority: urgent" -H "Tags: no_entry" \
|
|
-d "Source directory $SOURCE not found" "$NTFY_URL"
|
|
exit 1
|
|
fi
|
|
|
|
echo "$(date '+%Y/%m/%d %H:%M:%S') Starting backup: $SERVICE" >> "$LOG_FILE"
|
|
|
|
SYNC_ERROR=$(rclone sync "$SOURCE" "$REMOTE" \
|
|
--include "$FILTER" \
|
|
--max-age "$MAX_AGE" \
|
|
--bwlimit "$BW_LIMIT" \
|
|
--delete-before \
|
|
--delete-excluded \
|
|
--checksum $YANDEX_OPTS \
|
|
-q 2>&1)
|
|
|
|
if [ -n "$SYNC_ERROR" ]; then
|
|
echo "[SYNC ERROR] $SYNC_ERROR" >> "$LOG_FILE"
|
|
fi
|
|
|
|
CHECK_OUT=$(rclone check "$SOURCE" "$REMOTE" \
|
|
--include "$FILTER" \
|
|
--max-age "$MAX_AGE" \
|
|
--one-way 2>&1)
|
|
|
|
echo "$CHECK_OUT" >> "$LOG_FILE"
|
|
|
|
DIFFS=$(echo "$CHECK_OUT" | grep -oE '[0-9]+ differences found' | awk '{print $1}')
|
|
MATCH=$(echo "$CHECK_OUT" | grep -oE '[0-9]+ matching files' | awk '{print $1}')
|
|
|
|
DIFFS=${DIFFS:-0}
|
|
MATCH=${MATCH:-0}
|
|
|
|
STATUS="WARNING"
|
|
TAGS="warning"
|
|
PRIORITY="high"
|
|
MSG_PREFIX="Check failed"
|
|
|
|
if [ -z "$SYNC_ERROR" ] && [ "$DIFFS" = "0" ] && ! echo "$CHECK_OUT" | grep -iq "error"; then
|
|
STATUS="SUCCESS"
|
|
TAGS="white_check_mark"
|
|
PRIORITY="default"
|
|
MSG_PREFIX="Integrity verified"
|
|
fi
|
|
|
|
MESSAGE="$MSG_PREFIX
|
|
Matching: $MATCH
|
|
Differences: $DIFFS
|
|
Storage: $REMOTE"
|
|
|
|
if [ -n "$SYNC_ERROR" ]; then
|
|
MESSAGE="$MESSAGE
|
|
$SYNC_ERROR"
|
|
fi
|
|
|
|
curl -s -u "$AUTH" \
|
|
-H "Title: $SERVICE Backup: $STATUS" \
|
|
-H "Priority: $PRIORITY" \
|
|
-H "Tags: $TAGS" \
|
|
-d "$MESSAGE" \
|
|
"$NTFY_URL" > /dev/null |