Update PgBackRest wrapper script and move the config data into separate folder

This commit is contained in:
2024-10-08 15:44:18 +09:00
parent ee05e3dd2e
commit 0c35a50648
6 changed files with 112 additions and 23 deletions

View File

@@ -49,36 +49,54 @@ function convert_time
## VARIABLES
REGEX_COMMENT="^[\ \t]*#";
INI_BLOCK="^\[[A-Za-z]*\]";
BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/";
CONFIG="${BASE_FOLDER}../config/";
BACKUP_TYPE="";
OVERRIDE_STANZA="";
LIST_STANZA=0;
TEST=0;
sudo_user="pgbackrest";
# testweb (replaces kome) (aws2/ohio)
# zac fte (aws2/tokyo)
# sushi database
# udon core
# mailing-service-a (aws2/oregon)
# url-redirect-logging (aws9/tokyo)
# mrktsec (aws3/tokyo)
# instawin (aws8/tokyo)
stanza_list="testwebegplusww zacfte sushidatabase udoncore mailingservicea urlredirectlogging mrktsec instawin";
config_file="${CONFIG}pgbackrest.cfg";
stanza_file="${CONFIG}stanza.cfg";
if [ -f "${config_file}" ]; then
# shellcheck disable=SC1090
# shellcheck disable=SC2283
source <(grep = "${config_file}" | sed 's/ *= */=/g')
else
echo "Missing config file ${config_file}";
exit;
fi;
if [ -z "${sudo_user}" ]; then
echo "sudo_user not set in the config file ${config_file}";
exit;
fi;
# stanza list file
if [ ! -f "${stanza_file}" ]; then
echo "Missing stanza config file ${stanza_file}";
exit;
fi;
PRINTF_BLOCK="=== [%-8s: %19s] ==[%s]===============>\n";
## OPT PARSEIN
while getopts ":b:s:lt" opt; do
case "${opt}" in
b) # backuptype
b)
# backuptype
BACKUP_TYPE="${OPTARG}";
;;
s) # stanza
s)
# stanza
OVERRIDE_STANZA="${OPTARG}";
;;
l) # list
l)
# list
LIST_STANZA=1;
;;
t) # test
t)
# test
TEST=1;
;;
:)
@@ -106,6 +124,23 @@ if [ $LIST_STANZA -eq 1 ]; then
for stanza in ${stanza_list}; do
echo "${stanza}";
done;
while read -r stanza; do
# skip empty
[ -z "${stanza}" ] && continue;
# skip starting with #
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
# skip the ini header blocks
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
# if override stanza matching
if [ "${stanza}" = "${OVERRIDE_STANZA}" ]; then
echo "[*] ${stanza}";
else
echo "[ ] ${stanza}";
fi;
done <<< "$(cat "${stanza_file}")";
echo "";
echo "Entry marked with '*' is set as override stanza, and will be the only one backed up";
echo "";
exit;
fi;
@@ -124,20 +159,40 @@ SET_OVERRIDE_STANZA=0;
# if we have override single host
if [ -n "${OVERRIDE_STANZA}" ]; then
echo "+ Set override stanza too: ${OVERRIDE_STANZA}";
for stanza in ${stanza_list}; do
while read -r stanza; do
# skip empty
[ -z "${stanza}" ] && continue;
# skip starting with #
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
# skip the ini header blocks
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
# if override stanza matching
if [ "${stanza}" = "${OVERRIDE_STANZA}" ]; then
stanza_list="${OVERRIDE_STANZA}";
SET_OVERRIDE_STANZA=1;
break;
fi;
done;
done <<< "$(cat "${stanza_file}")";
if [ $SET_OVERRIDE_STANZA = 0 ]; then
echo "[!!!] Failed to set override stanza: ${OVERRIDE_STANZA}";
exit;
fi;
fi;
# run backup
for stanza in ${stanza_list}; do
while read -r stanza; do
# skip empty
[ -z "${stanza}" ] && continue;
# skip starting with #
[[ "${stanza}" =~ ${REGEX_COMMENT} ]] && continue;
# skip the ini header blocks
[[ "${stanza}" =~ ${INI_BLOCK} ]] && continue;
# override stanza check
if [ -n "${OVERRIDE_STANZA}" ]; then
if [ "${stanza}" != "${OVERRIDE_STANZA}" ]; then
continue
fi;
fi;
# main backup start
START=$(date +'%s');
# shellcheck disable=SC2059
printf "${PRINTF_BLOCK}" "START" "$(date +'%F %T')" "${stanza}";
@@ -145,12 +200,12 @@ for stanza in ${stanza_list}; do
if [ $TEST -eq 1 ]; then
echo "sudo -u ${sudo_user} pgbackrest --type=${BACKUP_TYPE} --stanza=${stanza} backup;";
else
sudo -u ${sudo_user} pgbackrest --type="${BACKUP_TYPE}" --stanza="${stanza}" backup;
sudo -u "${sudo_user}" pgbackrest --type="${BACKUP_TYPE}" --stanza="${stanza}" backup;
fi;
DURATION=$(( $(date +'%s')-START ));
# shellcheck disable=SC2059
printf "${PRINTF_BLOCK}" "END" "$(convert_time ${DURATION})" "${stanza}";
done;
done <<< "$(cat "${stanza_file}")";
echo "* PgBackrest Backup end";
if [ $TEST -eq 1 ]; then
echo "[..........] TEST RUN ONLY";