#!/bin/sh if [ -z "$1" ]; then echo "Usage: $0 " 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 \ $ADVANCED_CLOUD_FLAG \ -q 2>&1) if [ -n "$SYNC_ERROR" ]; then COUNT_ERROR=$(echo "$SYNC_ERROR" | wc -l) if [ "$COUNT_ERROR" -gt 15 ]; then TOP=3 BOTTOM=3 SYNC_ERROR_TRUNCATED=$(echo "$SYNC_ERROR" | head -n $TOP) SKIPPED=$(($COUNT_ERROR - $TOP - $BOTTOM)) SYNC_ERROR_TRUNCATED="$SYNC_ERROR_TRUNCATED ... skipped $SKIPPED lines ... $(echo "$SYNC_ERROR" | tail -n $BOTTOM)" SYNC_ERROR="$SYNC_ERROR_TRUNCATED" fi 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}' | tail -n 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