すでにstderrを使用しているbashスクリプトにエラーがあるかどうかを検出する方法

すでにstderrを使用しているbashスクリプトにエラーがあるかどうかを検出する方法

私は複数の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またはファイルシステムエラーです。

関連情報