-
-
Save mouson/c75ee8e9cbc61036a97e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# crontab -e | |
# 0 0 * * 1-5 /bin/sh /home/backup/back_all_site.sh 'daily' | |
# 1 0 * * 6 /bin/sh /home/backup/back_all_site.sh 'weekly' | |
# 2 0 1 * * /bin/sh /home/backup/back_all_site.sh 'monthly' | |
BACKUP_TIME=`date +%Y%m%d%H%M%S` | |
BACKUP_FILENAME="${BACKUP_TIME}" | |
BACKUP_DIR='/home/backup' | |
RSYNC_PASSWORD_FILE='/etc/rsyncd.secrets' | |
DB_USER=user | |
DB_PASSWORD=password | |
NAS_USER=admin | |
NAS_IP=192.168.0.1 | |
NAS_FOLDER='WebSiteBackUp/' | |
SLACK_CHANNEL='#general' | |
SLACK_URL='https://xxx.slack.com/services/hooks/incoming-webhook?token=xxxx' | |
# mysql_backup "PROJECT_NAME" "DB_NAME" | |
mysql_backup() { | |
PROJECT_NAME=$1 | |
DB_NAME=$2 | |
DELETE_FILE="${BACKUP_DIR}/deleteback-${PROJECT_NAME}-db.txt" | |
mkdir -p ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY} | |
mysqldump -u $DB_USER -p"$DB_PASSWORD" $DB_NAME | gzip > ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}/${BACKUP_FILENAME}.sql.gz | |
ls --sort=time -1 ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}/* 2>/dev/null | tail -n+6 >> $DELETE_FILE | |
if [ -f "$DELETE_FILE" ]; then | |
cd ${BACKUP_DIR}/${PROJECT_NAME}/db/${FREQUENCY}; xargs --arg-file $DELETE_FILE rm | |
sleep 1 | |
delete_file $DELETE_FILE | |
fi | |
echo "successed db(${DB_NAME}) back up!!" | |
} | |
# web_backup "PROJECT_NAME" "WEB_FOLDER" | |
web_backup() { | |
PROJECT_NAME=$1 | |
WEB_FOLDER=$2 | |
DELETE_FILE="${BACKUP_DIR}/deleteback-${PROJECT_NAME}-db.txt" | |
mkdir -p ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY} | |
tar -zcf ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}/${BACKUP_FILENAME}.tar.gz -C $BASE_DIR ${WEB_FOLDER} | |
ls --sort=time -1 ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}/* 2>/dev/null | tail -n+6 >> $DELETE_FILE | |
if [ -f "$DELETE_FILE" ]; then | |
cd ${BACKUP_DIR}/${PROJECT_NAME}/web/${FREQUENCY}; xargs --arg-file $DELETE_FILE rm | |
sleep 1 | |
delete_file $DELETE_FILE | |
fi | |
echo "successed web(${WEB_NAME}) back up!!" | |
} | |
backup_to_nas() { | |
rsync -av --delete --password-file=${RSYNC_PASSWORD_FILE} ${BACKUP_DIR} $NAS_USER@$NAS_IP::$NAS_FOLDER | |
} | |
delete_file() { | |
rm -f "$1" | |
} | |
send_slack() { | |
MASSAGE=$1 | |
if [ ! -z "$SLACK_URL" ]; then | |
curl -X POST --data-urlencode 'payload={"channel": "'"${SLACK_CHANNEL}"'", "username": "BackupBot", "text": "'"${MASSAGE}"'", "icon_url": "http://i.imgur.com/hOXJBMJl.png"}' ${SLACK_URL} | |
fi | |
} | |
case $1 in | |
"daily") | |
FREQUENCY="daily" | |
FREQUENCY_TEXT="每天定期" | |
;; | |
"weekly") | |
FREQUENCY="weekly" | |
FREQUENCY_TEXT="每週定期" | |
;; | |
"monthly") | |
FREQUENCY="monthly" | |
FREQUENCY_TEXT="每月定期" | |
;; | |
*) | |
echo "only daily; weekly; monthly;" | |
exit 1 | |
;; | |
esac | |
if [ ! -z "$FREQUENCY" ]; then | |
if [ -z "$RSYNC_PASSWORD_FILE" ] || [ ! -f "$RSYNC_PASSWORD_FILE" ]; then | |
echo "\RSYNC_PASSWORD_FILE not found " | |
else | |
send_slack "準備進行 ${FREQUENCY_TEXT} 備份所有網站資料及資料庫了,請把安全帶繫好~" | |
# Web1 | |
mysql_backup "XXX.com.tw" "Web1" | |
web_backup "XXX.com.tw" "/home/Web1" | |
# Web2 | |
mysql_backup "OOO.com.tw" "Web2" | |
web_backup "OOO.com.tw" "/home/Web2" | |
# BackUp To NAS | |
backup_to_nas | |
send_slack "好了 可以解開安全帶了,${FREQUENCY_TEXT} 備份完成了" | |
exit; | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment