私は複数のWebサイトの小規模データベースをサポートし、結果を含む電子メールを管理者に送信しています。私はstderrに電子メールで完全なエラーを送信するように指示しました。エラーが発生したかどうかを検出して電子メールの件名に一致するように変更する方法はありますか?
私は2つのファイルを使用しますが、最初のファイルは単に設定され、サイトによって異なります。
#!/usr/bin/bash
#set -euo pipefail
set -u
email="[email protected]"
keep="+14"
#include script
. cronjobs/do_backup.sh
echo Main
#mysql Config File
dbcfg="cronjobs/_dbaccess.cnf"
#Backup using database, group_suffix in cnf file and backup_name
db="zzzcity_directory"
dbgrp="_zzz_directory"
bkp="db_zzz_directory.sql"
backup $db $dbcfg $dbgrp $bkp &>>$msg
#Backup using database, group_suffix in cnf file and backup_name
db="zzzcity_potluck"
dbgrp="_zzz_potluck"
bkp="db_zzz_potluck.sql"
backup $db $dbcfg $dbgrp $bkp &>>$msg
#Maintain backup copies and send email
finalize $keep $email
echo Done
2番目はすべてのWebサイトで同じです。
do_backup.sh
#!/usr/bin/bash
timestamp=$(date +"%F")
backup_dir="backup"
mysqldump="/usr/bin/mysqldump"
stat="/usr/bin/stat"
msg="tmp/backup_msg"
echo "Date: $(date)" > $msg
echo "Hostname: $(hostname)" >> $msg
echo >> $msg
echo >> $msg
mkdir -p "$backup_dir/$timestamp" 2>> $msg
main() {
db=$1
dbcfg=$2
dbpgrp=$3
bkp="$backup_dir/$timestamp/$4"
echo "Backing: $db"
echo "To: $bkp"
$mysqldump --defaults-extra-file=$dbcfg --defaults-group-suffix=$dbgrp $db > $bkp
size=$($stat -c%s $bkp)
echo "Filesize: $size"
echo
}
backup () {
main $1 $2 $3 $4
}
finish () {
keep=$1
echo "Keeping: $keep copies"
echo "Removing excess backups"
find $backup_dir/ -type d -mtime +$keep -exec rm -r {} +
echo
echo "Finished: $(date)"
}
finalize (){
finish $1 &>>$msg
mail -s "MySQL Backup script has run" "$2" <$msg
#rm -f $MSG
}
追加の説明
- cronを使用して実行され、毎日午前2時に実行されます。
- MySQLデータベースをバックアップし、
.cnf
ファイルで認証しています。 - 私はバックアップ日というディレクトリに14のコピーを保持します。
- 最も古いものは削除されます。
メールは次のとおりです
日付:2023年5月9日火曜日02:00:02 AEST
ホスト名:zzzバックアップ: zzzcity_directory
ターゲット: backup/2023-05-09/db_zzz_directory.sql
ファイルサイズ: 6463サポート: zzzcity_potluck
受信者: backup/2023-05-09/db_zzz_potluck.sql
ファイルサイズ: 3541維持: コピー +14
重複バックアップを削除完了時間: 2023年5月9日火曜日02:00:04 AEST
質問
現在、メールの件名は固定されています。エラーがあれば変更したいと思います。それ以外の場合は、すべての電子メールを開く必要があります。すでにstderrを使用して電子メールの詳細を整理していますが、何か失敗したという表示をどのように取得できますか?気に入る2つはmysqldumpまたはファイルシステムエラーです。