Назад | Перейти на главную страницу

Скрипт tmnotify в MacOS, отправляющий ложные уведомления по электронной почте

Я новичок в MacOS. В нашей среде мы используем MacOS и настраиваем Time Machine для резервного копирования на удаленный диск.

Большая часть MacOS - это либо Mojave, либо Catalina.

У меня есть сценарий, который проверяет, полностью ли выполнено резервное копирование, и в зависимости от статуса отправляет уведомления по электронной почте.

С тех пор, как мы обновили MacOS до High Sierra или Catalina, мы получаем ложные уведомления по электронной почте, и даже если Time Machine завершает резервное копирование, мы получаем уведомление: «Time Machine не завершила резервное копирование на этом Mac!»

Я добавил «Машина времени» и «Терминал» в разделе «Полный доступ к диску» в системных настройках.

Прилагаю свой сценарий для справки.

Жду некоторых указателей.

Спасибо.

#!/bin/bash

#   This script checks the Time Machine results file on a Mac, and reports if a backup has completed within a number of minutes of the current time.

critMinutes=1440;
FROM="me@example.com>"
RCPT="me@example.com"
subject="Time Machine Backup"
thishost=`hostname -s | sed -e 's/^[^.]*\.//'`

# Check to see if we're running Mavericks as Time Machine runs a little differently
osVersion=`sw_vers -productVersion | grep -E -o "[0-9]+\.[0-9]+"`
isMavericks=`echo $osVersion '== 10.9' | bc -l`
isYosemitePlus=`echo $osVersion '< 10.2' | bc -l`
currentDate=`date +%s`

if [ $isMavericks -eq 1 ] || [ $isYosemitePlus -eq 1 ]
then
    # 10.9+ Check
    lastBackupDateString=`tmutil latestbackup | grep -E -o "[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}"`

    if [ "$lastBackupDateString" == "" ]
    then
                lastBackupDateString=`defaults read /Library/Preferences/com.gfi.MaxRMM.TimeMachine LastBackup`
        if [ "$lastBackupDateString" == "" ]
        then
      echo "CRITICAL - $thishost Time Machine has not completed a backup on this Mac!" | mail -s "Time Machine Backup" $RCPT
          exit 1002
        fi
    fi

    lastBackupDate=`date -j -f "%Y-%m-%d-%H%M%S" $lastBackupDateString "+%s"`
    `defaults write /Library/Preferences/com.gfi.MaxRMM.TimeMachine LastBackup -string ''$lastBackupDateString''`
else
    # < 10.9 Check
    lastBackupDateString=`defaults read /private/var/db/.TimeMachine.Results BACKUP_COMPLETED_DATE`

    if [ "$lastBackupDateString" == "" ]
    then
        echo "CRITICAL - $thishost Time Machine has not completed a backup on this Mac!" | mail -s "Time Machine Backup" $RCPT
        exit 1002
    fi

    lastBackupDate=`date -j -f "%Y-%m-%e %H:%M:%S %z" "$lastBackupDateString" "+%s"`
fi

diff=$(($currentDate - $lastBackupDate))
critSeconds=$(($critMinutes * 60))

if [ "$diff" -gt "$critSeconds" ]
then
    echo "CRITICAL - $thishost backup not taken since `date -j -f %s $lastBackupDate` (more than 1 day)!" | mail -s "Time Machine Backup" $RCPT
    exit 1003
fi

if [ "$lastBackupDate" != "" ]
then
    echo "OK - $thishost backup taken within last 1 day. (`date -j -f %s $lastBackupDate`)" | mail -s "Time Machine Backup" $RCPT
    exit 0
else
    echo "CRITICAL - $thishost could not determine the last backup date." | mail -s "Time Machine Backup" $RCPT 
    exit 1002
fi