feat: support multiple remotes
This commit is contained in:
2 files changed
+87
-23
No files matched your search
+28
-15
@@ -124,8 +124,6 @@ function backup_package() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function upload() {
|
function upload() {
|
||||||
color blue "upload backup file to storage system"
|
|
||||||
|
|
||||||
# upload file not exist
|
# upload file not exist
|
||||||
if [[ ! -e "${UPLOAD_FILE}" ]]; then
|
if [[ ! -e "${UPLOAD_FILE}" ]]; then
|
||||||
color red "upload file not found"
|
color red "upload file not found"
|
||||||
@@ -135,10 +133,22 @@ function upload() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rclone ${RCLONE_GLOBAL_FLAG} copy "${UPLOAD_FILE}" "${RCLONE_REMOTE}"
|
# upload
|
||||||
if [[ $? != 0 ]]; then
|
local HAS_ERROR="FALSE"
|
||||||
color red "upload failed"
|
|
||||||
|
|
||||||
|
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
|
||||||
|
do
|
||||||
|
color blue "upload backup file to storage system $(color yellow "[${RCLONE_REMOTE_X}]")"
|
||||||
|
|
||||||
|
rclone ${RCLONE_GLOBAL_FLAG} copy "${UPLOAD_FILE}" "${RCLONE_REMOTE_X}"
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "upload failed"
|
||||||
|
|
||||||
|
HAS_ERROR="TRUE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${HAS_ERROR}" == "TRUE" ]]; then
|
||||||
send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")."
|
send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")."
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
@@ -147,18 +157,21 @@ function upload() {
|
|||||||
|
|
||||||
function clear_history() {
|
function clear_history() {
|
||||||
if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then
|
if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then
|
||||||
color blue "delete ${BACKUP_KEEP_DAYS} days ago backup files"
|
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
|
||||||
|
|
||||||
mapfile -t RCLONE_DELETE_LIST < <(rclone ${RCLONE_GLOBAL_FLAG} lsf "${RCLONE_REMOTE}" --min-age "${BACKUP_KEEP_DAYS}d")
|
|
||||||
|
|
||||||
for RCLONE_DELETE_FILE in "${RCLONE_DELETE_LIST[@]}"
|
|
||||||
do
|
do
|
||||||
color yellow "deleting \"${RCLONE_DELETE_FILE}\""
|
color blue "delete ${BACKUP_KEEP_DAYS} days ago backup files $(color yellow "[${RCLONE_REMOTE_X}]")"
|
||||||
|
|
||||||
rclone ${RCLONE_GLOBAL_FLAG} delete "${RCLONE_REMOTE}/${RCLONE_DELETE_FILE}"
|
mapfile -t RCLONE_DELETE_LIST < <(rclone ${RCLONE_GLOBAL_FLAG} lsf "${RCLONE_REMOTE_X}" --min-age "${BACKUP_KEEP_DAYS}d")
|
||||||
if [[ $? != 0 ]]; then
|
|
||||||
color red "delete \"${RCLONE_DELETE_FILE}\" failed"
|
for RCLONE_DELETE_FILE in "${RCLONE_DELETE_LIST[@]}"
|
||||||
fi
|
do
|
||||||
|
color yellow "deleting \"${RCLONE_DELETE_FILE}\""
|
||||||
|
|
||||||
|
rclone ${RCLONE_GLOBAL_FLAG} delete "${RCLONE_REMOTE_X}/${RCLONE_DELETE_FILE}"
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "delete \"${RCLONE_DELETE_FILE}\" failed"
|
||||||
|
fi
|
||||||
|
done
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
+59
-8
@@ -31,6 +31,7 @@ function color() {
|
|||||||
# None
|
# None
|
||||||
########################################
|
########################################
|
||||||
function check_rclone_connection() {
|
function check_rclone_connection() {
|
||||||
|
# check configuration exist
|
||||||
rclone ${RCLONE_GLOBAL_FLAG} config show "${RCLONE_REMOTE_NAME}" > /dev/null 2>&1
|
rclone ${RCLONE_GLOBAL_FLAG} config show "${RCLONE_REMOTE_NAME}" > /dev/null 2>&1
|
||||||
if [[ $? != 0 ]]; then
|
if [[ $? != 0 ]]; then
|
||||||
color red "rclone configuration information not found"
|
color red "rclone configuration information not found"
|
||||||
@@ -38,9 +39,20 @@ function check_rclone_connection() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rclone ${RCLONE_GLOBAL_FLAG} mkdir "${RCLONE_REMOTE}"
|
# check connection
|
||||||
if [[ $? != 0 ]]; then
|
local HAS_ERROR="FALSE"
|
||||||
color red "storage system connection failure"
|
|
||||||
|
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
|
||||||
|
do
|
||||||
|
rclone ${RCLONE_GLOBAL_FLAG} mkdir "${RCLONE_REMOTE_X}"
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "storage system connection failure $(color yellow "[${RCLONE_REMOTE_X}]")"
|
||||||
|
|
||||||
|
HAS_ERROR="TRUE"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${HAS_ERROR}" == "TRUE" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -179,6 +191,40 @@ function get_env() {
|
|||||||
export "${VAR}=${VALUE}"
|
export "${VAR}=${VALUE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Get RCLONE_REMOTE_LIST variables.
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# variable value
|
||||||
|
########################################
|
||||||
|
function get_rclone_remote_list() {
|
||||||
|
# RCLONE_REMOTE_LIST
|
||||||
|
RCLONE_REMOTE_LIST=()
|
||||||
|
|
||||||
|
local i=0
|
||||||
|
local RCLONE_REMOTE_NAME_X_REFER
|
||||||
|
local RCLONE_REMOTE_DIR_X_REFER
|
||||||
|
local RCLONE_REMOTE_X
|
||||||
|
|
||||||
|
# for multiple
|
||||||
|
while true; do
|
||||||
|
RCLONE_REMOTE_NAME_X_REFER="RCLONE_REMOTE_NAME_${i}"
|
||||||
|
RCLONE_REMOTE_DIR_X_REFER="RCLONE_REMOTE_DIR_${i}"
|
||||||
|
get_env "${RCLONE_REMOTE_NAME_X_REFER}"
|
||||||
|
get_env "${RCLONE_REMOTE_DIR_X_REFER}"
|
||||||
|
|
||||||
|
if [[ -z "${!RCLONE_REMOTE_NAME_X_REFER}" || -z "${!RCLONE_REMOTE_DIR_X_REFER}" ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
RCLONE_REMOTE_X=$(echo "${!RCLONE_REMOTE_NAME_X_REFER}:${!RCLONE_REMOTE_DIR_X_REFER}" | sed 's@\(/*\)$@@')
|
||||||
|
RCLONE_REMOTE_LIST=(${RCLONE_REMOTE_LIST[@]} "${RCLONE_REMOTE_X}")
|
||||||
|
|
||||||
|
((i++))
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# Initialization environment variables.
|
# Initialization environment variables.
|
||||||
# Arguments:
|
# Arguments:
|
||||||
@@ -200,13 +246,15 @@ function init_env() {
|
|||||||
# RCLONE_REMOTE_NAME
|
# RCLONE_REMOTE_NAME
|
||||||
get_env RCLONE_REMOTE_NAME
|
get_env RCLONE_REMOTE_NAME
|
||||||
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME:-"BitwardenBackup"}"
|
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME:-"BitwardenBackup"}"
|
||||||
|
RCLONE_REMOTE_NAME_0="${RCLONE_REMOTE_NAME}"
|
||||||
|
|
||||||
# RCLONE_REMOTE_DIR
|
# RCLONE_REMOTE_DIR
|
||||||
get_env RCLONE_REMOTE_DIR
|
get_env RCLONE_REMOTE_DIR
|
||||||
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR:-"/BitwardenBackup/"}"
|
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR:-"/BitwardenBackup/"}"
|
||||||
|
RCLONE_REMOTE_DIR_0="${RCLONE_REMOTE_DIR}"
|
||||||
|
|
||||||
# RCLONE_REMOTE
|
# get RCLONE_REMOTE_LIST
|
||||||
RCLONE_REMOTE=$(echo "${RCLONE_REMOTE_NAME}:${RCLONE_REMOTE_DIR}" | sed 's@\(/*\)$@@')
|
get_rclone_remote_list
|
||||||
|
|
||||||
# RCLONE_GLOBAL_FLAG
|
# RCLONE_GLOBAL_FLAG
|
||||||
get_env RCLONE_GLOBAL_FLAG
|
get_env RCLONE_GLOBAL_FLAG
|
||||||
@@ -262,9 +310,12 @@ function init_env() {
|
|||||||
color yellow "DATA_SENDS: ${DATA_SENDS}"
|
color yellow "DATA_SENDS: ${DATA_SENDS}"
|
||||||
color yellow "========================================"
|
color yellow "========================================"
|
||||||
color yellow "CRON: ${CRON}"
|
color yellow "CRON: ${CRON}"
|
||||||
color yellow "RCLONE_REMOTE_NAME: ${RCLONE_REMOTE_NAME}"
|
|
||||||
color yellow "RCLONE_REMOTE_DIR: ${RCLONE_REMOTE_DIR}"
|
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
|
||||||
color yellow "RCLONE_REMOTE: ${RCLONE_REMOTE}"
|
do
|
||||||
|
color yellow "RCLONE_REMOTE: ${RCLONE_REMOTE_X}"
|
||||||
|
done
|
||||||
|
|
||||||
color yellow "RCLONE_GLOBAL_FLAG: ${RCLONE_GLOBAL_FLAG}"
|
color yellow "RCLONE_GLOBAL_FLAG: ${RCLONE_GLOBAL_FLAG}"
|
||||||
color yellow "ZIP_ENABLE: ${ZIP_ENABLE}"
|
color yellow "ZIP_ENABLE: ${ZIP_ENABLE}"
|
||||||
color yellow "ZIP_PASSWORD: ${#ZIP_PASSWORD} Chars"
|
color yellow "ZIP_PASSWORD: ${#ZIP_PASSWORD} Chars"
|
||||||
|
|||||||
Reference in new issue
Block a user