Скрипт tmnotify в MacOS, отправляющий ложные уведомления по электронной почте - PullRequest
0 голосов
/ 06 апреля 2020

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

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

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

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

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

I Прилагаю свой скрипт для справки.

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

Спасибо.

#!/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="you@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
...