Written over QTS 4.4.2
Settings file - DockerVolumeBackupSettings.json
You can verify JSON with
If result if diffrent from 0 , you got wrong JSON, fix it !
GOOD RESULT:
BAD RESULT:
Script - DockerVolumeBackup.sh (do not forget to chmod +x DockerVolumeBackup.sh !)
RUNTIME:
Add to qnap's crontab line (example):
RESULT:
Settings file - DockerVolumeBackupSettings.json
JavaScript:
{
"Docker":{
"Emby":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/emby_config/_data/BACKUP/",
"Portainer":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/portainer/",
"Qbittorrent":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/qbit/",
"Radarr":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/radarr/_data/Backups/",
"Sonarr":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/sonarr/_data/Backups/",
"Lidarr":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/lidarr/_data/Backups/",
"Jackett":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/jackett/",
"SmokePing_Data":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/smokeping_data/",
"SmokePing_Config":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/smokeping_config/",
"JDownloader":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/jdownloader_config/",
"NetBootXYZ_Config":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/netbootxyz_config/",
"NextCloud_config":"/share/CACHEDEV1_DATA/Container/container-station-data/lib/docker/volumes/nextcloud_config/"
},
"BackupLocation":"/share/CACHEDEV2_DATA/DATA2/export/DockerVolumes/",
"BackupsToKeep":"7",
"Compression7z":"-mx=9",
"Archiver":"/usr/local/sbin/7z"
}
You can verify JSON with
jq empty DockerVolumeBackupSettings.json ; echo $?
If result if diffrent from 0 , you got wrong JSON, fix it !
GOOD RESULT:
BAD RESULT:
Script - DockerVolumeBackup.sh (do not forget to chmod +x DockerVolumeBackup.sh !)
Bash:
#!/usr/bin/env bash
#expand PATH VARIABLE .. just in case
PATH=$PATH:/usr/local/sbin/
command -v jq >/dev/null 2>&1 || { echo "I require jq but it's not installed. Aborting." >&2; exit 1; }
#get current date in file name friendly format
cdate=$(date +%Y-%m-%d_%H-%M)
#Settings for backup
JSON="/share/CACHEDEV2_DATA/DATA2/autoruns/DockerVolumeBackupSettings.json"
# check if file exists
if [ ! -f $JSON ]; then
echo "Cannot locate file with settings data ! Aborting !" >&2;
exit 1;
fi
compression_level=$(jq -r '.Compression7z' $JSON)
archiver=$(jq -r '.Archiver' $JSON)
# set backup location
BACKUP_LOCATION=$(jq -r '.BackupLocation' $JSON)
# get all dockers to backup from JSON
DOCKERS=$(jq -r '.Docker | keys[] as $k | "\($k)"' $JSON)
# convert to bash array
array=($DOCKERS)
# loop over array and do magic
for i in ${array[@]}; do
DOCKER_NAME="$i"
DOCKER_PATH=$(jq -r ".Docker.$i" $JSON)
# build command to execute
CMD="$archiver a $compression_level $BACKUP_LOCATION$cdate"_"$DOCKER_NAME.7z $DOCKER_PATH"
echo "Executing -> "$CMD
#execute it ?
eval $CMD
done
#keep last X backups
BACKUPS_TO_KEEP=$(jq -r '.BackupsToKeep' $JSON)
echo "Keeping last $BACKUPS_TO_KEEP backups in $BACKUP_LOCATION..."
find $BACKUP_LOCATION -type f -mtime +$BACKUPS_TO_KEEP -delete
RUNTIME:
Add to qnap's crontab line (example):
0 4 * * * /share/CACHEDEV2_DATA/DATA2/autoruns/DockerVolumeBackup.sh 1>/dev/null 2>&1
and do not forget to reload crontab service afterwards !RESULT: