[英]Error Handling For A Mac/UNIX Shell Script to Backup Our Web Servers and MySQL Databases
我為自己編寫了一個Shell腳本來備份我們的Web服務器並使其正常運行。 它導航到備份目錄,執行rsync,mysqldump,並將其全部提交到git存儲庫進行版本控制,然后將其推送到我們的遠程git服務器。 我了解到編寫計划的UNIX腳本有很多陷阱,所以我想知道是否遺漏了任何東西或使自己陷入災難。 如果整個過程中有任何錯誤,我如何通過電子郵件發送給我?
#!/bin/bash
#Exit on any error
set -e
LOGFILE=~/backups/web_backup-$(date +"%m.%d.%Y_%H.%M.%S").log
touch $LOGFILE
echo "Backup started for "$(date +"%m.%d.%Y_%H.%M.%S") | tee -a $LOGFILE
############################################################
###### BACKUP WEBSITE
############################################################
echo "Backing up Website..." 2>&1 | tee -a $LOGFILE
cd ~/backups/example.org
if [ "$?" != "0" ]; then
echo "Cannot change directory!" 1>&2
exit 1
fi
rsync -Pav --size-only --delete --filter='P .git' --filter='P example.com.sql' backups@example.com:/path/to/example.org/ ~/backups/example.org/ 2>&1 | tee -a $LOGFILE
echo "Backing up Example.com DB..." 2>&1 | tee -a $LOGFILE
ssh backups@example.com "mysqldump -u user -hlocalhost -ppassword dbname > example.com.sql
echo "Adding files to Git Repository..." 2>&1 | tee -a $LOGFILE
git add . 2>&1 | tee -a $LOGFILE| tee -a $LOGFILE
echo "Commiting files to Git Repository..." 2>&1 | tee -a $LOGFILE
git commit -m "Backup as of "$(date +"%m.%d.%Y_%H.%M.%S") 2>&1 | tee -a $LOGFILE
echo "Pusing Git Repo to Remote Location..." 2>&1 | tee -a $LOGFILE
git push origin master 2>&1 | tee -a $LOGFILE
echo "Finished backing up Website..." 2>&1 | tee -a $LOGFILE
echo "Backup Finished for "$(date +"%m.%d.%Y_%H.%M.%S")
exit
在腳本中聲明一個報告文件,並將所有輸出定向到該文件。 檢查copy和rsynch命令的退出狀態($?),如果退出狀態不等於零,則使用什么,然后使用mail命令將郵件發送到帶有報告文件的地址
mail -s "subject " -c "cc address" "to-address" < reportfile name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.