0

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
4

1 に答える 1

0

スクリプトでレポート ファイルを宣言し、すべての出力をそこに送信します。copy コマンドと rsynch コマンドの終了ステータス ($?) を確認します。終了ステータスが 0 でない場合は、何を使用してもかまいません。次に、mail コマンドを使用して、レポート ファイルのあるアドレスにメールを送信します。

mail -s "subject " -c "cc address" "to-address" < reportfile name
于 2012-07-26T09:12:36.463 に答える