Compare commits

...

2 Commits

Author SHA1 Message Date
Asif Bacchus
b8f96227cc replaced all ${stamp} with [$(stamp)] 2018-10-28 05:24:47 -06:00
Asif Bacchus
9e704bd440 removed static stamp var and replaced with dynamic function 2018-10-28 05:23:43 -06:00

View File

@ -12,7 +12,6 @@ lit="\e[93m"
op="\e[39m"
info="\e[96m"
note="\e[95m"
stamp="[`date +%Y-%m-%d` `date +%H:%M:%S`]"
### Functions ###
@ -90,6 +89,11 @@ function scriptHelp {
exit 1
}
### generate dynamic timestamps
function stamp {
echo `date +%F" "%T`
}
### quit -- exit the script after logging any errors, warnings, etc.
function quit {
# list generated warnings, if any
@ -106,7 +110,7 @@ function quit {
fi
if [ -z "${exitError}" ]; then
# exit cleanly
echo -e "${note}${stamp} --- ${scriptName} completed" \
echo -e "${note}[$(stamp)] --- ${scriptName} completed" \
"---${normal}" >> "$logFile"
exit 0
else
@ -162,10 +166,10 @@ function cleanup {
checkResult="$?"
if [ "$checkResult" = "0" ]; then
# directory still exists
exitWarn+=("${stamp}_111")
exitWarn+=("[$(stamp)]_111")
else
# directory removed
echo -e "${op}${stamp} Removed SQL temp directory${normal}" \
echo -e "${op}[$(stamp)] Removed SQL temp directory${normal}" \
>> "$logFile"
fi
@ -173,21 +177,21 @@ function cleanup {
# check value of 'clean503' to see if this is necessary (=1) otherwise, skip
if [ "$clean503" = "1" ]; then
# proceed with cleanup
echo -e "${op}${stamp} Removing 503 error page..." >> "$logFile"
echo -e "${op}[$(stamp)] Removing 503 error page..." >> "$logFile"
rm -f "$webroot/$err503File" >> "$logFile" 2>&1
# verify file is actually gone
checkExist ff "$webroot/$err503File"
checkResult="$?"
if [ "$checkResult" = "0" ]; then
# file still exists
exitWarn+=("${stamp}_5030")
exitWarn+=("[$(stamp)]_5030")
else
# file removed
echo -e "${info}${stamp} -- [INFO] 503 page removed from webroot" \
echo -e "${info}[$(stamp)] -- [INFO] 503 page removed from webroot" \
"--${normal}" >> "$logFile"
fi
else
echo -e "${op}${stamp} 503 error page never copied to webroot," \
echo -e "${op}[$(stamp)] 503 error page never copied to webroot," \
"nothing to cleanup" >> "$logFile"
fi
@ -195,10 +199,10 @@ function cleanup {
ncMaint off
# check if successful
if [ "$maintResult" = "0" ]; then
echo -e "${info}${stamp} -- [INFO] NextCloud now in regular" \
echo -e "${info}[$(stamp)] -- [INFO] NextCloud now in regular" \
"operating mode --${normal}" >> "$logFile"
else
exitError+=("${stamp}_101")
exitError+=("[$(stamp)]_101")
quit
fi
}
@ -425,9 +429,9 @@ fi
### Log start of script operations
echo -e "${note}${stamp}--- Start $scriptName execution ---${normal}" \
echo -e "${note}[$(stamp)]--- Start $scriptName execution ---${normal}" \
>> "$logFile"
echo -e "${info}${stamp}-- [INFO] Log file located at ${lit}${logFile}${info}" \
echo -e "${info}[$(stamp)]-- [INFO] Log file located at ${lit}${logFile}${info}" \
"--${normal}" >> "$logFile"
@ -438,7 +442,7 @@ export logFile="$logFile"
### Create sqlDump temporary directory and sqlDumpFile name
sqlDumpDir=$( mktemp -d )
sqlDumpFile="backup-`date +%Y%m%d_%H%M%S`.sql"
echo -e "${info}${stamp} -- [INFO] mySQL dump file will be stored" \
echo -e "${info}[$(stamp)] -- [INFO] mySQL dump file will be stored" \
"at: ${lit}${sqlDumpDir}/${sqlDumpFile}${normal}" >> "$logFile"
@ -451,9 +455,9 @@ echo -e "${info}${stamp} -- [INFO] mySQL dump file will be stored" \
## Check if webroot has been specified, if not, skip this entire section since there is nowhere to copy the 503 file.
if [ -z "$webroot" ]; then
# no webroot path provided
echo -e "${info}${stamp} -- [INFO] ${warn503} --${normal}" \
echo -e "${info}[$(stamp)] -- [INFO] ${warn503} --${normal}" \
>> "$logFile"
exitWarn+=("${stamp}_5031")
exitWarn+=("[$(stamp)]_5031")
clean503=0
else
# verify webroot actually exists
@ -461,41 +465,41 @@ else
checkResult="$?"
if [ "$checkResult" = "1" ]; then
# webroot directory specified could not be found
echo -e "${info}${stamp} -- [INFO] ${warn503} --${normal}" \
echo -e "${info}[$(stamp)] -- [INFO] ${warn503} --${normal}" \
>> "$logFile"
exitWarn+=("{$stamp}_5032")
clean503=0
else
# webroot exists
echo -e "${op}${stamp} Using webroot: ${lit}${webroot}${normal}" \
echo -e "${op}[$(stamp)] Using webroot: ${lit}${webroot}${normal}" \
>> "$logFile"
# Verify 503 file existance at given path
checkExist ff "$err503Path"
checkResult="$?"
if [ "$checkResult" = "1" ]; then
# 503 file could not be found
echo -e "${info}${stamp} -- [INFO] ${warn503} --${normal}" \
echo -e "${info}[$(stamp)] -- [INFO] ${warn503} --${normal}" \
>> "$logFile"
exitWarn+=("${stamp}_5033")
exitWarn+=("[$(stamp)]_5033")
clean503=0
else
# 503 file exists and webroot is valid. Let's copy it!
echo -e "${op}${stamp} ${err503File} found at ${lit}${err503Path}" \
echo -e "${op}[$(stamp)] ${err503File} found at ${lit}${err503Path}" \
"${normal}" >> "$logFile"
echo -e "${op}${stamp} Copying 503 error page to webroot..." \
echo -e "${op}[$(stamp)] Copying 503 error page to webroot..." \
"${normal}" >> "$logFile"
cp "${err503Path}" "$webroot/" >> "$logFile" 2>&1
copyResult="$?"
# verify copy was successful
if [ "$copyResult" = "1" ]; then
# copy was unsuccessful
echo -e "${info}${stamp} -- [INFO] ${warn503} --${normal}" \
echo -e "${info}[$(stamp)] -- [INFO] ${warn503} --${normal}" \
>> "$logFile"
exitWarn+=("${stamp}_5035")
exitWarn+=("[$(stamp)]_5035")
clean503=0
else
# copy was successful
echo -e "${info}${stamp} -- [INFO] 503 error page" \
echo -e "${info}[$(stamp)] -- [INFO] 503 error page" \
"successfully copied to webroot --${normal}" >> "$logFile"
clean503=1
fi
@ -510,10 +514,10 @@ fi
ncMaint on
# check if successful
if [ "$maintResult" = "0" ]; then
echo -e "${info}${stamp} -- [INFO] NextCloud now in maintenance mode --" \
echo -e "${info}[$(stamp)] -- [INFO] NextCloud now in maintenance mode --" \
"${normal}" >> "$logFile"
else
exitError+=("${stamp}_100")
exitError+=("[$(stamp)]_100")
cleanup
quit
fi
@ -524,23 +528,23 @@ mapfile -t sqlParams < "$sqlDetails"
### Dump SQL
echo -e "${op}${stamp} Dumping NextCloud SQL database...${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Dumping NextCloud SQL database...${normal}" >> "$logFile"
mysqldump --single-transaction -h"${sqlParams[0]}" -u"${sqlParams[1]}" \
-p"${sqlParams[2]}" "${sqlParams[3]}" > "${sqlDumpDir}/${sqlDumpFile}" \
2>> "$logFile"
# verify
dumpResult="$?"
if [ "$dumpResult" = "0" ]; then
echo -e "${ok}${stamp} -- [SUCCESS] SQL dumped successfully --${normal}" \
echo -e "${ok}[$(stamp)] -- [SUCCESS] SQL dumped successfully --${normal}" \
>> "$logFile"
else
exitError+=("${stamp}_200")
exitError+=("[$(stamp)]_200")
cleanup
quit
fi
### Call borgbackup to copy actual files
echo -e "${op}${stamp} Pre-backup tasks completed, calling borgbackup..." \
echo -e "${op}[$(stamp)] Pre-backup tasks completed, calling borgbackup..." \
"${normal}" >> "$logFile"
## Get borgbackup settings and repo details
@ -549,10 +553,10 @@ mapfile -t borgConfig < "$borgDetails"
## check if any required borg configuration variables in defintion file are
## empty and exit with error, otherwise, map array items to variables
# check: borg base directory
echo -e "${op}${stamp} Verifying supplied borg configuration variables..." \
echo -e "${op}[$(stamp)] Verifying supplied borg configuration variables..." \
"${normal}" >> "$logFile"
if [ -z "${borgConfig[0]}" ]; then
exitError+=("${stamp}_210")
exitError+=("[$(stamp)]_210")
cleanup
quit
else
@ -561,16 +565,16 @@ else
checkResult="$?"
if [ "$checkResult" = "1" ]; then
# borg base directory specified could not be found
exitError+=("${stamp}_210")
exitError+=("[$(stamp)]_210")
cleanup
quit
fi
echo -e "${op}${stamp} Borg base dir... OK${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Borg base dir... OK${normal}" >> "$logFile"
export BORG_BASE_DIR="${borgConfig[0]%/}"
fi
# check: path to SSH keyfile
if [ -z "${borgConfig[1]}" ]; then
exitError+=("${stamp}_211")
exitError+=("[$(stamp)]_211")
cleanup
quit
else
@ -578,28 +582,28 @@ else
checkResult="$?"
if [ "$checkResult" = 1 ]; then
# SSH keyfile specified could not be found
exitError+=("${stamp}_211")
exitError+=("[$(stamp)]_211")
cleanup
quit
fi
echo -e "${op}${stamp} Borg SSH key... OK${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Borg SSH key... OK${normal}" >> "$logFile"
export BORG_RSH="ssh -i ${borgConfig[1]}"
fi
# check: name of borg repo
if [ -z "${borgConfig[2]}" ]; then
exitError+=("${stamp}_212")
exitError+=("[$(stamp)]_212")
cleanup
quit
else
echo -e "${op}${stamp} Borg REPO name... OK${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Borg REPO name... OK${normal}" >> "$logFile"
export BORG_REPO="${borgConfig[2]}"
fi
# repo password
if [ -n "${borgConfig[3]}" ]; then
echo -e "${op}${stamp} Borg SSH/REPO password... OK${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Borg SSH/REPO password... OK${normal}" >> "$logFile"
export BORG_PASSPHRASE="${borgConfig[3]}"
else
exitWarn+=("${stamp}_2111")
exitWarn+=("[$(stamp)]_2111")
# if the password was omitted by mistake, export a dummy password so borg
# fails with an error instead of sitting and waiting for input
export BORG_PASSPHRASE="DummyPasswordSoBorgFails"
@ -612,31 +616,31 @@ borgExclude="${borgConfig[5]}"
borgPrune="${borgConfig[6]}"
# export: borg remote path (if not blank)
if [ -n "${borgConfig[7]}" ]; then
echo -e "${op}${stamp} Borg REMOTE path... OK${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Borg REMOTE path... OK${normal}" >> "$logFile"
export BORG_REMOTE_PATH="${borgConfig[7]}"
else
exitWarn+=("${stamp}_2112")
exitWarn+=("[$(stamp)]_2112")
fi
## If borgXtra exists, map contents to an array variable
if [ -n "$borgXtra" ]; then
echo -e "${op}${stamp} Processing referenced extra files list for" \
echo -e "${op}[$(stamp)] Processing referenced extra files list for" \
"borgbackup to include in backup${normal}" >> "$logFile"
checkExist ff "$borgXtra"
checkResult="$?"
if [ "$checkResult" = "0" ]; then
echo -e "${op}${stamp} Found ${lit}${borgXtra}${normal}" >> "$logFile"
echo -e "${op}[$(stamp)] Found ${lit}${borgXtra}${normal}" >> "$logFile"
mapfile -t xtraFiles < "$borgXtra"
echo -e "${op}${stamp} Processed extra files list for inclusion in" \
echo -e "${op}[$(stamp)] Processed extra files list for inclusion in" \
"borgbackup${normal}" >> "$logFile"
else
exitWarn+=("${stamp}_2113")
exitWarn+=("[$(stamp)]_2113")
fi
else
# no extra locations specified
echo -e "${op}${stamp} No additional locations specified for backup." \
echo -e "${op}[$(stamp)] No additional locations specified for backup." \
"Only NextCloud data files will be backed up${normal}" >> "$logFile"
exitWarn+=("${stamp}_2116")
exitWarn+=("[$(stamp)]_2116")
fi
## Check if borgExclude exists since borg will throw an error if it's missing
@ -644,16 +648,16 @@ if [ -n "$borgExclude" ]; then
checkExist ff "$borgExclude"
checkResult="$?"
if [ "$checkResult" = "0" ]; then
echo -e "${op}${stamp} Found ${lit}${borgExclude}${normal}" \
echo -e "${op}[$(stamp)] Found ${lit}${borgExclude}${normal}" \
>> "$logFile"
else
# file not found, unset the variable so it's like it was not specified
# in the first place and continue with backup
unset borgExclude
exitWarn+=("${stamp}_2114")
exitWarn+=("[$(stamp)]_2114")
fi
else
echo -e "${op}${stamp} Exclusion pattern file not specified." \
echo -e "${op}[$(stamp)] Exclusion pattern file not specified." \
"No exclusions will be processed${normal}" >> "$logFile"
fi
@ -664,13 +668,13 @@ fi
## the 'noexec' option for security. Thus, we will use/create a 'tmp' folder
## within the BORG_BASE_DIR and instruct python to use that instead of /tmp
# check if BORG_BASE_DIR/tmp exists, if not, create it
echo -e "${op}${stamp} Checking for tmp directory at ${lit}${BORG_BASE_DIR}" \
echo -e "${op}[$(stamp)] Checking for tmp directory at ${lit}${BORG_BASE_DIR}" \
"${normal}" >> "$logFile"
checkExist fd "$BORG_BASE_DIR/tmp"
checkResult="$?"
if [ "$checkResult" = "1" ]; then
# folder not found
echo -e "${op}${stamp} tmp folder not found... creating${lit}" \
echo -e "${op}[$(stamp)] tmp folder not found... creating${lit}" \
"${BORG_BASE_DIR}/tmp${normal}" >> "$logFile"
mkdir "$BORG_BASE_DIR/tmp" 2>> "$logFile"
# verify folder created
@ -678,17 +682,17 @@ if [ "$checkResult" = "1" ]; then
checkResult="$?"
if [ "$checkResult" = "0" ]; then
# folder exists
echo -e "${op}${stamp} tmp folder created within borg base directory" \
echo -e "${op}[$(stamp)] tmp folder created within borg base directory" \
"${normal}" >> "$logFile"
else
# problem creating folder and script will exit
exitError+=("${stamp}_215")
exitError+=("[$(stamp)]_215")
cleanup
quit
fi
else
# folder found
echo -e "${op}${stamp} tmp folder found within borg base directory" \
echo -e "${op}[$(stamp)] tmp folder found within borg base directory" \
"${normal}" >> "$logFile"
fi
# export TMPDIR environment variable
@ -699,7 +703,7 @@ export TMPDIR="${BORG_BASE_DIR}/tmp"
# commandline depends on whether borgExclude is empty or not
if [ -z "$borgExclude" ]; then
# borgExclude is empty
echo -e "${info}${stamp} --[INFO] Executing borg without exclusions --" \
echo -e "${info}[$(stamp)] --[INFO] Executing borg without exclusions --" \
"${normal}" >> "$logFile"
borg --show-rc create ${borgCreateParams} ::`date +%Y-%m-%d_%H%M%S` \
${xtraFiles[@]} \
@ -707,7 +711,7 @@ if [ -z "$borgExclude" ]; then
2>> "$logFile"
else
# borgExclude is not empty
echo -e "${info}${stamp} --[INFO] Executing borg with exclusions --" \
echo -e "${info}[$(stamp)] --[INFO] Executing borg with exclusions --" \
"${normal}" >> "$logFile"
borg --show-rc create ${borgCreateParams} --exclude-from ${borgExclude} \
::`date +%Y-%m-%d_%H%M%S` \
@ -719,54 +723,54 @@ fi
## Check status of borg operation
borgResult="$?"
if [ "$borgResult" -eq 0 ]; then
echo -e "${ok}${stamp} -- [SUCCESS] Borg backup completed successfully --" \
echo -e "${ok}[$(stamp)] -- [SUCCESS] Borg backup completed successfully --" \
"${normal}" >> "$logFile"
elif [ "$borgResult" -eq 1 ]; then
exitWarn+=("${stamp}_2200")
exitWarn+=("[$(stamp)]_2200")
elif [ "$borgResult" -ge 2 ]; then
exitError+=("${stamp}_220")
exitError+=("[$(stamp)]_220")
cleanup
quit
else
exitWarn+=("${stamp}_2201")
exitWarn+=("[$(stamp)]_2201")
fi
## Generate and execute borg prune
# command depends on whether or not parameters have been defined
if [ -n "$borgPrune" ]; then
# parameters defined
echo -e "${info}${stamp} --[INFO] Executing borg prune operation --" \
echo -e "${info}[$(stamp)] --[INFO] Executing borg prune operation --" \
"${normal}" >> "$logFile"
borg prune --show-rc -v ${borgPruneParams} ${borgPrune} \
2>> "$logFile"
# check return-status
pruneResult="$?"
if [ "$pruneResult" -eq 0 ]; then
echo -e "${ok}${stamp} -- [SUCCESS] Borg prune completed successfully" \
echo -e "${ok}[$(stamp)] -- [SUCCESS] Borg prune completed successfully" \
"--${normal}" >> "$logFile"
elif [ "$pruneResult" -eq 1 ]; then
exitWarn+=("${stamp}_2210")
exitWarn+=("[$(stamp)]_2210")
elif [ "$pruneResult" -ge 2 ]; then
exitError+=("${stamp}_221")
exitError+=("[$(stamp)]_221")
else
exitWarn+=("${stamp}_2212")
exitWarn+=("[$(stamp)]_2212")
fi
else
# parameters not defined... skip pruning
exitWarn+=("${stamp}_2115")
exitWarn+=("[$(stamp)]_2115")
fi
### borgbackup completed
echo -e "${op}${stamp} Borgbackup completed... begin cleanup" \
echo -e "${op}[$(stamp)] Borgbackup completed... begin cleanup" \
"${normal}" >> "$logFile"
### Exit script
echo -e "${bold}${op}${stamp} ***Normal exit process***${normal}" \
echo -e "${bold}${op}[$(stamp)] ***Normal exit process***${normal}" \
>> "$logFile"
cleanup
echo -e "${bold}${ok}${stamp} -- [SUCCESS] All processes completed" \
echo -e "${bold}${ok}[$(stamp)] -- [SUCCESS] All processes completed" \
"successfully --${normal}" >> "$logFile"
quit