이미 stderr을 사용하고 있는 bash 스크립트에 오류가 있는지 감지하는 방법

이미 stderr을 사용하고 있는 bash 스크립트에 오류가 있는지 감지하는 방법

저는 여러 웹사이트의 소규모 데이터베이스를 지원하고 결과가 포함된 이메일을 관리자에게 보내고 있습니다. 나는 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 또는 파일 시스템 오류입니다.

관련 정보