2018-09-19 15:12:56 -06:00
|
|
|
#!/bin/bash
|
|
|
|
|
2018-09-19 15:31:07 -06:00
|
|
|
|
|
|
|
### Text formatting presets
|
|
|
|
normal="\e[0m"
|
|
|
|
bold="\e[1m"
|
|
|
|
default="\e[39m"
|
|
|
|
red="\e[31m"
|
|
|
|
green="\e[32m"
|
2018-09-19 23:31:41 -06:00
|
|
|
yellow="\e[1;33m"
|
|
|
|
ltYellow="\e[93m"
|
2018-09-19 15:31:07 -06:00
|
|
|
magenta="\e[35m"
|
|
|
|
cyan="\e[36m"
|
|
|
|
stamp="[`date +%Y-%m-%d` `date +%H:%M:%S`]"
|
|
|
|
|
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
### Functions ###
|
|
|
|
|
|
|
|
### scriptHelp -- display usage information for this script
|
|
|
|
function scriptHelp {
|
|
|
|
echo "In the future, I will be something helpful!"
|
2018-09-19 17:11:48 -06:00
|
|
|
# exit with code 1 -- there is no use logging this
|
2018-09-19 16:04:59 -06:00
|
|
|
exit 1
|
2018-09-19 15:12:56 -06:00
|
|
|
}
|
|
|
|
|
2018-09-20 00:04:10 -06:00
|
|
|
### quit -- exit the script after logging any errors, warnings, etc.
|
2018-09-19 15:36:57 -06:00
|
|
|
function quit {
|
2018-09-19 23:22:57 -06:00
|
|
|
# list generated warnings, if any
|
|
|
|
if [ ${#exitWarn[@]} -gt 0 ]; then
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} Script generated the following" \
|
2018-09-19 23:22:57 -06:00
|
|
|
"warnings:${normal}" >> "$logFile"
|
2018-09-19 23:28:21 -06:00
|
|
|
for warn in "${exitWarn[@]}"; do
|
2018-09-19 23:53:10 -06:00
|
|
|
echo -e "\t${ltYellow}${warn}: ${warningExplain[$warn]}${normal}" \
|
2018-09-19 23:22:57 -06:00
|
|
|
>> "$logFile"
|
|
|
|
done
|
|
|
|
fi
|
2018-09-19 15:36:57 -06:00
|
|
|
if [ -z "$1" ]; then
|
|
|
|
# exit cleanly
|
|
|
|
echo -e "${bold}${green}${stamp} -- [SUCCESS] Script completed" \
|
2018-09-19 15:50:50 -06:00
|
|
|
"--$normal" >> "$logFile"
|
2018-09-19 15:36:57 -06:00
|
|
|
exit 0
|
|
|
|
else
|
|
|
|
# log error code and exit with said code
|
|
|
|
echo -e "${bold}${red}${stamp} -- [ERROR] Script exited with code $1" \
|
2018-09-19 15:50:50 -06:00
|
|
|
" --$normal" >> "$logFile"
|
2018-09-19 23:53:10 -06:00
|
|
|
echo -e "\t${red}${errorExplain[$1]}$normal" >> "$logFile"
|
2018-09-19 15:36:57 -06:00
|
|
|
exit "$1"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-09-19 16:45:37 -06:00
|
|
|
function checkExist {
|
|
|
|
if [ "$1" = "ff" ]; then
|
|
|
|
# find file
|
|
|
|
if [ -e "$2" ]; then
|
|
|
|
# found
|
|
|
|
return 0
|
|
|
|
else
|
|
|
|
# not found
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
elif [ "$1" = "fd" ]; then
|
|
|
|
# find directory
|
|
|
|
if [ -d "$2" ]; then
|
|
|
|
# found
|
|
|
|
return 0
|
|
|
|
else
|
|
|
|
# not found
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-09-20 00:04:10 -06:00
|
|
|
### ncMaint - perform NextCloud maintenance mode entry and exit
|
|
|
|
function ncMaint {
|
|
|
|
if [ "$1" = "on" ]; then
|
|
|
|
echo -e "${bold}${cyan}${stamp}Putting NextCloud in maintenance" \
|
|
|
|
"mode..." >> "$logFile"
|
|
|
|
su -c "php ${ncRoot}/occ maintenance:mode --on" - ${webUser} \
|
|
|
|
>> "$logFile" 2>&1
|
|
|
|
maintResult="$?"
|
|
|
|
return "$maintResult"
|
|
|
|
elif [ "$1" = "off" ]; then
|
|
|
|
echo -e "${bold}${cyan}${stamp}Exiting NextCloud maintenance mode..." \
|
|
|
|
>> "$logFile"
|
|
|
|
su -c "php ${ncRoot}/occ maintenance:mode --off" - ${webUser} \
|
|
|
|
>> "$logFile" 2>&1
|
|
|
|
maintResult="$?"
|
|
|
|
return "$maintResult"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
### End of Functions ###
|
|
|
|
|
|
|
|
|
|
|
|
### Default parameters
|
|
|
|
|
|
|
|
# store the logfile in the same directory as this script using the script's name
|
|
|
|
# with the extension .log
|
|
|
|
scriptPath="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
scriptName="$( basename ${0} )"
|
|
|
|
logFile="$scriptPath/${scriptName%.*}.log"
|
|
|
|
|
2018-09-19 15:45:59 -06:00
|
|
|
# set script parameters to null and initialize array variables
|
|
|
|
unset PARAMS
|
2018-09-19 16:30:18 -06:00
|
|
|
unset borgCreateParams
|
|
|
|
unset borgPruneParams
|
2018-09-19 17:01:02 -06:00
|
|
|
unset sqlDumpDir
|
2018-09-19 22:48:00 -06:00
|
|
|
unset location503
|
2018-09-19 22:14:19 -06:00
|
|
|
unset webroot
|
2018-09-19 15:45:59 -06:00
|
|
|
errorExplain=()
|
2018-09-19 21:48:18 -06:00
|
|
|
exitWarn=()
|
2018-09-19 22:24:24 -06:00
|
|
|
warningExplain=()
|
2018-09-19 15:45:59 -06:00
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
|
2018-09-19 15:51:38 -06:00
|
|
|
### Error codes
|
2018-09-19 16:09:27 -06:00
|
|
|
errorExplain[2]="This script MUST be run as ROOT."
|
2018-09-19 23:53:10 -06:00
|
|
|
errorExplain[100]="Could not put NextCloud into Maintenance mode."
|
2018-09-19 15:51:38 -06:00
|
|
|
|
2018-09-19 22:24:24 -06:00
|
|
|
### Warning codes & messages
|
|
|
|
warningExplain[5031]="No path to a 503 error page file was specified (-5 parameter missing)"
|
|
|
|
warningExplain[5032]="The specified 503 error page could not be found"
|
|
|
|
warningExplain[5033]="No webroot path was specified (-w parameter missing)"
|
|
|
|
warningExplain[5034]="The specified webroot could not be found"
|
|
|
|
warningExplain[5035]="Error copying 503 error page to webroot"
|
2018-09-19 23:32:54 -06:00
|
|
|
warn503="${ltYellow}Web users will NOT be informed the server is down!${normal}"
|
2018-09-19 22:24:24 -06:00
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
### Process script parameters
|
|
|
|
|
|
|
|
# if no parameters provided, then show the help page and exit with error
|
2018-09-19 22:58:44 -06:00
|
|
|
#if [ -z $1 ]; then
|
|
|
|
# # show script help page
|
|
|
|
# scriptHelp
|
|
|
|
#fi
|
2018-09-19 15:12:56 -06:00
|
|
|
|
|
|
|
# use GetOpts to process parameters
|
2018-09-19 22:14:19 -06:00
|
|
|
while getopts ':l:nv5:w:' PARAMS; do
|
2018-09-19 15:12:56 -06:00
|
|
|
case "$PARAMS" in
|
|
|
|
l)
|
|
|
|
# use provided location for logFile
|
|
|
|
logFile="${OPTARG}"
|
|
|
|
;;
|
2018-09-19 16:30:18 -06:00
|
|
|
n)
|
2018-09-19 23:09:00 -06:00
|
|
|
# normal output from Borg
|
|
|
|
borgCreateParams='--stats'
|
|
|
|
borgPruneParams='--list'
|
2018-09-19 16:30:18 -06:00
|
|
|
;;
|
|
|
|
v)
|
2018-09-19 23:09:00 -06:00
|
|
|
# verbose output from Borg
|
|
|
|
borgCreateParams='--list --stats'
|
|
|
|
borgPruneParams='--list'
|
2018-09-19 16:30:18 -06:00
|
|
|
;;
|
2018-09-19 21:53:34 -06:00
|
|
|
5)
|
|
|
|
# 503 error page location
|
2018-09-19 22:48:00 -06:00
|
|
|
location503="${OPTARG}"
|
2018-09-19 21:53:34 -06:00
|
|
|
;;
|
2018-09-19 22:14:19 -06:00
|
|
|
w)
|
|
|
|
# path to webroot for NextCloud installation
|
|
|
|
webroot="${OPTARG}"
|
|
|
|
;;
|
2018-09-19 15:41:44 -06:00
|
|
|
?)
|
|
|
|
# unrecognized parameters trigger scriptHelp
|
2018-09-19 15:57:06 -06:00
|
|
|
scriptHelp
|
2018-09-19 15:41:44 -06:00
|
|
|
;;
|
2018-09-19 15:12:56 -06:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
|
2018-09-19 16:09:27 -06:00
|
|
|
### Verify script running as root, otherwise exit
|
2018-09-19 16:04:59 -06:00
|
|
|
if [ $(id -u) -ne 0 ]; then
|
2018-09-19 16:09:27 -06:00
|
|
|
quit 2
|
2018-09-19 16:04:59 -06:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
2018-09-19 16:00:38 -06:00
|
|
|
### Log start of script operations
|
|
|
|
echo -e "${bold}${stamp}-- Start $scriptName execution ---" >> "$logFile"
|
|
|
|
|
|
|
|
|
2018-09-19 16:31:52 -06:00
|
|
|
### Export logFile variable for use by Borg
|
|
|
|
export logFile="$logFile"
|
|
|
|
|
|
|
|
|
2018-09-19 17:08:52 -06:00
|
|
|
### Create sqlDump temporary directory and sqlDumpFile name
|
2018-09-19 17:01:02 -06:00
|
|
|
sqlDumpDir=$( mktemp -d )
|
2018-09-19 17:08:52 -06:00
|
|
|
sqlDumpFile="backup-`date +%Y%m%d_%H%M%S`.sql"
|
2018-09-19 23:09:00 -06:00
|
|
|
echo -e "${normal}${stamp} mySQL dump file will be stored at:" >> "$logFile"
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${ltYellow}${sqlDumpDir}/${sqlDumpFile}${normal}" >> "$logFile"
|
2018-09-19 16:00:38 -06:00
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
|
2018-09-19 21:53:34 -06:00
|
|
|
### 503 error page
|
|
|
|
|
|
|
|
# Verify 503 existance
|
2018-09-19 22:48:00 -06:00
|
|
|
if [ -z "$location503" ]; then
|
2018-09-19 21:53:34 -06:00
|
|
|
# no 503 file has been provided
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} -- [WARNING] code 5031 --${normal}" \
|
2018-09-19 23:09:00 -06:00
|
|
|
>> "$logFile"
|
|
|
|
echo -e "$warn503" >> "$logFile"
|
2018-09-19 21:53:34 -06:00
|
|
|
exitWarn+=('5031')
|
|
|
|
else
|
2018-09-19 22:48:00 -06:00
|
|
|
checkExist ff "$location503"
|
2018-09-19 21:53:34 -06:00
|
|
|
checkResult="$?"
|
|
|
|
if [ "$checkResult" = "1" ]; then
|
|
|
|
# 503 file specified could not be found
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} -- [WARNING] code 5032 --${normal}" \
|
2018-09-19 23:09:00 -06:00
|
|
|
>> "$logFile"
|
|
|
|
echo -e "$warn503" >> "$logFile"
|
2018-09-19 21:53:34 -06:00
|
|
|
exitWarn+=('5032')
|
|
|
|
else
|
2018-09-19 22:43:27 -06:00
|
|
|
# 503 file found
|
|
|
|
|
|
|
|
# verify webroot exists
|
2018-09-19 22:13:19 -06:00
|
|
|
if [ -z "$webroot" ]; then
|
|
|
|
# no webroot path provided
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} -- [WARNING] code 5033 --"\
|
2018-09-19 23:09:00 -06:00
|
|
|
"${normal}" >> "$logFile"
|
|
|
|
echo -e "$warn503" >> "$logFile"
|
2018-09-19 22:13:19 -06:00
|
|
|
exitWarn+=('5033')
|
|
|
|
else
|
2018-09-19 22:43:27 -06:00
|
|
|
# verify provided webroot path exists
|
|
|
|
checkExist fd "$webroot"
|
2018-09-19 22:13:19 -06:00
|
|
|
checkResult="$?"
|
|
|
|
if [ "$checkResult" = "1" ]; then
|
|
|
|
# webroot directory specified could not be found
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} -- [WARNING] code 5034 --" \
|
2018-09-19 23:09:00 -06:00
|
|
|
"${normal}" >> "$logFile"
|
2018-09-19 23:43:12 -06:00
|
|
|
echo -e "$warn503" >> "$logFile"
|
2018-09-19 22:13:19 -06:00
|
|
|
exitWarn+=('5034')
|
|
|
|
else
|
|
|
|
# webroot exists and 503 exists, copy 503 to webroot
|
2018-09-19 23:43:12 -06:00
|
|
|
cp "${location503}" "$webroot/" >> "$logFile" 2>&1
|
2018-09-19 22:43:27 -06:00
|
|
|
copyResult="$?"
|
2018-09-19 22:13:19 -06:00
|
|
|
# verify copy was successful
|
|
|
|
if [ "$copyResult" = "1" ]; then
|
2018-09-19 23:43:12 -06:00
|
|
|
# copy was unsuccessful
|
2018-09-19 23:31:41 -06:00
|
|
|
echo -e "${yellow}${stamp} -- [WARNING] code" \
|
2018-09-19 23:09:00 -06:00
|
|
|
"5035 --${normal}" >> "$logFile"
|
|
|
|
echo -e "$warn503" >> "$logFile"
|
2018-09-19 22:13:19 -06:00
|
|
|
exitWarn+=('5035')
|
2018-09-19 23:43:12 -06:00
|
|
|
else
|
|
|
|
# copy was successful
|
|
|
|
echo -e "${bold}${cyan}${stamp} 503 error page" \
|
|
|
|
"copied to webroot${normal}" >> "$logFile"
|
|
|
|
fi
|
2018-09-19 22:13:19 -06:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2018-09-19 23:50:33 -06:00
|
|
|
### Put NextCloud in maintenance mode
|
|
|
|
ncMaint on
|
|
|
|
# check if successful
|
|
|
|
if [ "$maintResult" = "0" ]; then
|
|
|
|
echo -e "${bold}${cyan}${stamp}...done${normal}" >> "$logFile"
|
|
|
|
else
|
|
|
|
cleanup 503
|
2018-09-19 23:53:10 -06:00
|
|
|
quit 100
|
2018-09-19 23:50:33 -06:00
|
|
|
fi
|
|
|
|
|
2018-09-19 23:23:44 -06:00
|
|
|
### Exit script
|
|
|
|
quit
|
2018-09-19 21:53:34 -06:00
|
|
|
|
2018-09-19 15:12:56 -06:00
|
|
|
# This code should not be executed since the 'quit' function should terminate
|
|
|
|
# this script. Therefore, exit with code 99 if we get to this point.
|
|
|
|
exit 99
|