#!/bin/sh # Check if container name is provided if [ -z "$1" ]; then echo "Usage: $0 [--exclude=]" echo "Example: $0 immich" echo "Example: $0 immich --exclude=immich/nasphoto" exit 1 fi DOCKER_DIR="/DATA01/dockers" CONTAINER_NAME="$1" CONTAINER_DIR="$DOCKER_DIR/$CONTAINER_NAME" EXCLUDE_OPTION="" # Parse exclude option if provided if [ -n "$2" ]; then case "$2" in --exclude=*) EXCLUDE_DIR="${2#--exclude=}" EXCLUDE_OPTION="--exclude $EXCLUDE_DIR" ;; *) echo "錯誤: 無效的參數: $2" echo "Usage: $0 [--exclude=]" exit 1 ;; esac fi # Check if container directory exists if [ ! -d "$CONTAINER_DIR" ]; then echo "錯誤: 容器目錄不存在: $CONTAINER_DIR" echo "無法備份一個目錄不存在的 docker" exit 1 fi echo "$(date +'%F %R:%S'): Backup start." SAVE_PATH="/nas/Backup/backup_docker/$CONTAINER_NAME/files" NOW_DATETIME="$(date +'%Y%m%d_%H%M%S')" BACKUP_FILENAME="backup_${CONTAINER_NAME}_$NOW_DATETIME.tar" BACKUP_FILE_PATH="$SAVE_PATH/$BACKUP_FILENAME" BACKUP_CMD="sudo tar -cv $EXCLUDE_OPTION -f $BACKUP_FILENAME $CONTAINER_NAME" echo "DOCKER_DIR: $DOCKER_DIR" echo "CONTAINER_DIR: $CONTAINER_DIR" echo "SAVE_PATH: $SAVE_PATH" echo "NOW_DATETIME: $NOW_DATETIME" echo "BACKUP_FILENAME: $BACKUP_FILENAME" echo "BACKUP_FILE_PATH: $BACKUP_FILE_PATH" echo "BACKUP_CMD: $BACKUP_CMD" echo "$(date +'%F %R:%S'): Backup start. BACKUP_CMD = $BACKUP_CMD" echo pwd=$(pwd) mkdir -p $SAVE_PATH ## Clean up old backups before creating new one, keep only the newest 4 files echo "$(date +'%F %R:%S'): Cleaning up old backups before backup..." /home/awin/scripts/newestN.sh -d="$SAVE_PATH" -n=4 --confirm=0 sudo docker compose -f ${CONTAINER_DIR}/docker-compose.yml down cd $DOCKER_DIR $BACKUP_CMD sudo docker compose -f ${CONTAINER_DIR}/docker-compose.yml up -d ## Move BACKUP_FILENAME to BACKUP_FILE_PATH echo "rsync -avh --progress $BACKUP_FILENAME $SAVE_PATH" rsync -ah --progress $BACKUP_FILENAME $SAVE_PATH ## Delete local backup file echo "rm $BACKUP_FILENAME" rm -f $BACKUP_FILENAME echo "$(date +'%F %R:%S'): Backup finished."