#!/bin/bash # ========================== # CONFIG # ========================== SCRIPT_NAME="create_tar.sh" EXCLUDE_FILE="/root/samot_dev/samot1/exclude.txt" # Absolute path to avoid cron errors SOURCE_DIR="/root/samot_dev/samot1" # Your project folder BACKUP_DIR="/root/bak/samot_dev" # Output directory DATE=$(date +"%Y-%m-%d_%H-%M-%S") OUTPUT_FILE="$BACKUP_DIR/samot_$DATE.tar.gz" # Email settings (msmtp) EMAIL_TO="[email protected]" EMAIL_FROM="[email protected]" HOSTNAME=$(hostname) LOGFILE="$HOME/.backup_task.log" # Ensure backup folder exists mkdir -p "$BACKUP_DIR" # ========================== # FUNCTIONS # ========================== send_email() { SUBJECT="$1" MESSAGE="$2" echo -e "Subject: $SUBJECT\nFrom: $EMAIL_FROM\nTo: $EMAIL_TO\n\n$MESSAGE" \ | msmtp --debug -f "$EMAIL_FROM" "$EMAIL_TO" } log() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" >> "$LOGFILE" } # ========================== # START # ========================== log "=== Backup job started ===" # Check exclude list if [ ! -f "$EXCLUDE_FILE" ]; then ERR="❌ Exclude file not found: $EXCLUDE_FILE" log "$ERR" send_email \ "❌ BACKUP FAILED on $HOSTNAME" \ "$ERR Script: $SCRIPT_NAME Time: $(date)" exit 1 fi # ========================== # CREATE TAR.GZ # ========================== log "Creating archive: $OUTPUT_FILE" tar --exclude-from="$EXCLUDE_FILE" -czf "$OUTPUT_FILE" -C "$SOURCE_DIR" . if [ $? -ne 0 ]; then ERR="❌ Failed to create archive file: $OUTPUT_FILE" log "$ERR" send_email \ "❌ BACKUP FAILED on $HOSTNAME" \ "$ERR Script: $SCRIPT_NAME Time: $(date)" exit 1 fi log "✅ Backup successfully created: $OUTPUT_FILE" log "=== Backup job finished ===" exit 0