Refine backup script
This commit is contained in:
74
backup_docker.sh
Executable file
74
backup_docker.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Check if container name is provided
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <container_name> [--exclude=<DIR_NAME>]"
|
||||
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 <container_name> [--exclude=<DIR_NAME>]"
|
||||
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."
|
||||
Reference in New Issue
Block a user