저는 여러 웹사이트의 소규모 데이터베이스를 지원하고 결과가 포함된 이메일을 관리자에게 보내고 있습니다. 나는 stderr에게 이메일로 전체 오류를 보내도록 지시했습니다. 오류가 발생했는지 감지하여 이메일 제목을 일치하도록 변경할 수 있는 방법이 있습니까?
나는 두 개의 파일을 사용하는데, 첫 번째 파일은 그냥 설정하고 사이트마다 다릅니다.
#!/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
두 번째는 모든 웹 사이트에서 동일합니다.
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을 사용하여 이메일의 세부 사항을 구성하고 있는데, 뭔가 실패했다는 표시를 어떻게 얻을 수 있나요? 마음에 떠오르는 두 가지는 mysqldump 또는 파일 시스템 오류입니다.