#!/bin/bash DIR_PATH="$(echo ${1} | sed 's:/*$::')" DIR=$(basename ${DIR_PATH}) LOG="${DIR}.log" TIMESTAMP=`date +%Y/%m/%d' '%H:%M:%S` echo # # show to screen and also write to log # function log() { echo -e "\e[96m`date +'%d/%m/%Y %H:%M:%S'`\e[39m ${1}" echo -e "`date +'%d/%m/%Y %H:%M:%S'` ${1}" >> ${LOG} } # # database - get credentials from settings.php # function get_credentials() { SETTINGS=$(find ${DIR_PATH} -name settings.php | grep default) DATABASE=$(cat $SETTINGS | tr -d ' ' | grep "^'database'" | awk -F\' '{print $4}') USERNAME=$(cat $SETTINGS | tr -d ' ' | grep "^'username'" | awk -F\' '{print $4}') PASSWORD=$(cat $SETTINGS | tr -d ' ' | grep "^'password'" | awk -F\' '{print $4}') DOMAIN=$(echo ${DIR_PATH} | awk -F/ '{print $5}') [[ -z "${SETTINGS}" ]] && log "Empty variable SETTINGS" && return 1 [[ -z "${DATABASE}" ]] && log "Empty variable DATABASE" && return 1 [[ -z "${USERNAME}" ]] && log "Empty variable USERNAME" && return 1 [[ -z "${PASSWORD}" ]] && log "Empty variable PASSWORD" && return 1 [[ -z "${DOMAIN}" ]] && log "Empty variable DOMAIN" && return 1 log "DIR : ${DIR}" log "SETTINGS : $(basename ${SETTINGS})" log "DATABASE : ${DATABASE}" log "USERNAME : ${USERNAME}" return 0 } # # database - verify credentials # function verify_credentials() { mysql -u"${USERNAME}" -p"${PASSWORD}" --batch --skip-column-names -e "SHOW DATABASES;" | grep "^${DATABASE}$" > /dev/null; if [ $? -ne 0 ];then log "Verify database credentials [FAIL]" return 1 fi log "Verify database credentials [ OK ]" return 0 } # # database - export data # function export_databse() { mysqldump -u"${USERNAME}" -p"${PASSWORD}" ${DATABASE} > ${DATABASE}.sql if [ $? -ne 0 ];then log "Export database [FAIL]" return 1 fi log "Export database [ OK ]" return 0 } # # Create TarBall # function create_tarball() { TARBALL="$(echo $RANDOM | md5sum | head -c 32; echo;)-${DIR}.tar.gz" tar -czpf ${TARBALL} ${DIR_PATH} ${DATABASE}.sql &> /dev/null if [ $? -ne 0 ];then log "Create tarball [FAIL]" return 1 fi log "Create tarball [ OK ]" rm -f "${DATABASE}.sql" # move to download path DOWNLOAD_PATH=${DIR_PATH} if [ -d "${DIR_PATH}/web" ];then DOWNLOAD_PATH="${DIR_PATH}/web" fi mv ${TARBALL} ${DOWNLOAD_PATH} # calculate download time and add 2 minutes for the user to click the download link INTERNET=40000 # 5Mbps SIZE=$( du -sh ./${TARBALL} | awk '{print $1}' ) SIZE_BYTES=$( du ./${TARBALL} | awk '{print $1}' ) SIZE_BITS=$(( SIZE_BYTES * 8 )) DOWNLOAD_SECS=$(( ${SIZE_BITS} / ${INTERNET} )) AVAILABLE_SECS=$(( ${DOWNLOAD_SECS} + 120 )) AVAILABLE_MINS=$(( ${AVAILABLE_SECS} / 60 )) # create download link echo >> ${LOG} log " 🍓 DOWNLOAD" echo >> ${LOG} echo "URL : https://${DOMAIN}/${TARBALL} " >> ${LOG} echo "Size : ${SIZE}" >> ${LOG} echo "Available for : ${AVAILABLE_MINS} minutes" >> ${LOG} echo >> ${LOG} return 0 } # # Delete tarball # function delete_tarball() { if [ -f ${DOWNLOAD_PATH}/${TARBALL} ];then ./safeDelete.sh "${DOWNLOAD_PATH}/${TARBALL}" ${AVAILABLE_SECS} & else log "Cannot find "${DOWNLOAD_PATH}/${TARBALL}" for deleting" fi } function add_server_stats() { echo >> ${LOG} log " 🍓 SERVER STATUS" echo >> ${LOG} log " - Users and Uptime" echo "$(w)" >> ${LOG} echo "" >> ${LOG} log " - Disk Usage" echo "$(df -h)" >> ${LOG} echo "" >> ${LOG} log " - Memory Usage" echo "$(free -g)" >> ${LOG} echo "" >> ${LOG} log " - Network Interface" echo "$(ifconfig eth0)" >> ${LOG} echo "" >> ${LOG} log " - System TOP 10 resources" echo "$(ps -eo pid,%cpu,%mem,user,comm --sort=-%cpu | head -n 11)" >> ${LOG} echo "" >> ${LOG} } # # Send mail # function send_mail_log() { SUBJECT="Backup ${DIR}" RECIPIENTS="stefanos@dotsoft.gr" cat ${LOG} | mailx -a 'Content-Type: text/html' -s ${SUBJECT} ${RECIPIENTS} } # dont start if you dont have a valid drupal directory [ $# -lt 1 ] && echo "${TIMESTAMP} Directory argument is missing" > backup.log && exit [ $# -gt 1 ] && echo "${TIMESTAMP} Too many arguments" > backup.log && exit [ ! -d ${DIR_PATH} ] && echo "${TIMESTAMP} ${DIR} does not exist" > backup.log && exit # Start function main () { echo -e "
" > ${LOG}
if get_credentials; then
if verify_credentials; then
if export_databse; then
if create_tarball; then
delete_tarball
fi
fi
fi
fi
add_server_stats
echo -e "" >> ${LOG}
send_mail_log
}
main