Мало кто из пользователей Mac OS X не слышал о программе резервного копирования Time Machine. Простота настройки и удобство в использовании, а также тот факт, что она доступна каждому пользователю OS X, делают ее практически незаменимой. Однако, иногда её функционала может оказаться недостаточно. Например, если вы хотите всегда быть в курсе состояния резервной копии своего компьютера, даже находясь вдали от него. В этом случае очень бы пригодилась функция уведомления пользователя по Email о текущем состоянии и актуальности резервной копии, которая, увы, доступна только в OS X Server.
Если вы тоже считаете, что расширять функционал своей OS X до серверного только ради получения уведомлений по Email, как минимум, нерационально, предлагаем два варианта решения этой задачи.
TM Error Logger
Творение компании Carnation Software предназначено специально для тех, кто хочет держать руку на пульсе Time Machine. Загрузить программу можно с официального сайта компании (распространяется она бесплатно). Интерфейс ее прост и, на наш взгляд, интуитивно понятен.
Большую часть окна занимает область, в которой отображаются логи Time Machine. При запуске программы в этой области по умолчанию отображаются записи о последнем резервном копировании. Нажатием на кнопку «Previous Log» можно листать и просматривать предыдущие записи, а кнопка «Current Log» вновь возвращает нас к последним.
Включить и настроить интересующую нас функцию уведомлений по электронной почте можно, нажав на клавишу «Email Notification».
В открывшемся окне достаточно указать свой адрес электронной почты (их можно указать два) и поставить галочку «Send email when backup fails». Таким образом, если вдруг в ходе резервного копирования возникнет ошибка, TM Error Logger отправит на указанный вами email сообщение, содержащее логи с этой ошибкой.
Стоит отметить, что для работы этой программы необходимо, чтобы она запускалась с учётной записи с правами администратора. В противном случае она не сможет получить доступ к логам Time Machine и, соответственно, будет бесполезна для тех, кто по той или иной причине (например, в целях безопасности) использует в основном учётную запись без прав администратора. На этот случай у нас припасён второй вариант.
Создание скрипта для регулярного мониторинга состояния резервной копии Time Machine
Для автоматизации пользовательских процессов в системе OS X компания Apple разработала специальный скриптовый язык AppleScript. Создан он был скорее для пользователя, нежели программиста, поэтому он довольно прост в использовании, а сами скрипты очень напоминают обычный текст на английском языке. Именно им мы и собираемся воспользоваться.
Для начала нам потребуется редактор скриптов. Он по умолчанию включен в состав OS X, и запустить его можно из папки «Утилиты» в Finder. Окно редактора скриптов разделено на две части. Верхняя предназначена для ввода кода, а нижняя – для анализа (здесь будут отображаться все выполняемые действия, а также полученные результаты). В нижней части также может отображаться описание скрипта, если вы решите его добавить.
Сначала напишем небольшой скрипт, который бы проверял дату последней резервной копии TimeMachine и выводил её на экран.
1 2 3 4 5 6 7 8 |
#Наша первая переменная выполняет команду tmutil latestbackup (как если бы мы ввели эту команду в Терминале), результатом которой является путь к последней успешной резервной копии Time Machine: set tmLatest to do shell script "/usr/bin/tmutil latestbackup" #Вторая переменная, latest, будет содержать путь, полученный в результате команды tmutil latestbackup: set latest to POSIX file tmLatest #Переменная mod_date будет содержать в себе дату последнего изменения папки с резервной копией Time Machine: set mod_date to modification date of (info for latest) #Выводим на экран сообщение с датой последней резервной копии Time Machine: display notification "Дата последней резервной копии Time Machine: " & mod_date with title "Результат проверки Time Machine" |
Чтобы проверить работу этого скрипта, нажмите на треугольник левом верхнем углу окна редактора скриптов. В результате скрипт должен выполниться и на экране появится сообщение.
Теперь добавим нашему скрипту функцию уведомления по Email.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Обращаемся к приложению Mail: tell application "Mail" #Просим Mail создать новое письмо: tell (make new outgoing message) #Указываем тему письма: set subject to "Результат проверки Time Machine" #Указываем текст в теле письма set content to "Дата последней резервной копии Time Machine: " & mod_date #Вместо "Ваш адрес" указываем свой email (адрес должен быть заключен в кавычки!): make new to recipient at end of to recipients with properties {address:"Ваш адрес"} send end tell end tell |
В принципе этого достаточно. Теперь наш скрипт узнает дату создания последней резервной копии Time Machine и сообщает ее вам по электронной почте. Однако, если вы хотите получать уведомления только в тех случаях, когда что-то идет не так, а не получать результаты каждой проверки, стоит немного доработать скрипт, приблизив его функционал к упомянутому выше TM Error Logger.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#начало оставим без изменений set tmLatest to do shell script "/usr/bin/tmutil latestbackup" set latest to POSIX file tmLatest set mod_date to modification date of (info for latest) #сравниваем текущую дату с датой изменения файла последней резервной копии и выражаем разницу в часах: set file_age to round (((current date) - mod_date) / hours) log "Последняя резервная копия была сделана " & file_age & " часов назад" #Проверяем, не выходит ли полученная разница за пределы допустимого. В данном случае указан предел 24 часа, но вы можете указать удобное вам значение: if file_age > 24 then #Если разница выходит за допустимые пределы, выводим сообщение с предупреждением на экран: display notification "Последняя резервная копия была сделана " & file_age & " часов назад" with title "Резервная копия Time Machine устарела!" sound name "Basso" #Узнаем имя компьютера. Это очень удобно, если вы следите за состоянием резервных копий нескольких компьютеров. set cn to computer name of (system info) #Далее мы обращаемся к приложению Mail для создания email уведомления, как и в предыдущей версии скрипта, с той лишь разницей, что текст сообщения будет другим: tell application "Mail" tell (make new outgoing message) set subject to cn & ". Резервная копия Time Machine устарела" set content to "Последняя резервная копия устройства " & cn & " была сделана " & file_age & " часов назад" make new to recipient at end of to recipients with properties {address:"Ваш адрес"} send end tell end tell end if |
Нажимаем Файл – Сохранить и выбираем удобную нам папку для сохранения. Желательно сохранить скрипт таким образом, чтобы он не слишком часто попадался на глаза и не было риска случайно его удалить. По умолчанию наше творение сохранится как скрипт с расширением .scpt. В нашем случае менять ничего не нужно.
Теперь, когда скрипт сохранён, необходимо научить систему автоматически его запускать. За запуск процессов в системе отвечает launchd. Это первый процесс, который вызывает ядро при загрузке системы, и за запуск всех остальных процессов отвечает именно он. При загрузке системы luanchd проверят папки LaunchAgents и LaunchDaemons на предмет инструкций относительно процессов, которые необходимо запустить. Эти инструкции представлены в виде файлов с расширением .plist. Если файл .plist находится в папке LaunchAgents, то процесс будет запущен при входе в учетную запись пользователя, если же поместить файл в папку LaunchDaemons, то процесс будет запущен вне зависимости от того, был осуществлен вход в учетную запись пользователя или нет. Для нашего скрипта больше подходит первый вариант.
Для того чтобы не создавать файл .plist вручную, советуем воспользоваться программой LaunchControl. Она заметно упрощает процесс, тем самым позволяя сэкономить немало времени и сил. Скачав архив с программой с официального сайта, распаковав его и запустив LaunchControl.app, мы увидим окно, разделенное на три части. В левом столбце отображается ниспадающее меню, позволяющее выбрать папку, с которой мы хотим работать, а также список самих файлов .plist, которые в выбранной папке находятся. По центру находится область, в которой указывается путь к исполняемому скрипту и его обработчику, а также область, в которой указываются условия, при которых наш скрипт должен запускаться. Список возможных условий находится в правой части окна.
Первым делом в ниспадающем меню слева выберем пункт «User Agents» и нажмем плюсик в нижней части левого столбца, чтобы создать новую запись. Новой записи стоит дать имя, которое бы описывало, что это за запись и для чего она создана, например, «tm.check.date». Название записи стоит продублировать в графе «Label».
Затем удаляем путь к обработчику по умолчанию в разделе «Program to run» и добавляем нужный нам:
/usr/bin/osascript
Ставим пробел после пути к обработчику, находим файл нашего скрипта в Finder и перетаскиваем его в окно Launch Control в раздел «Program to run», тем самым указывая путь к нему. В результате запись должна выглядеть примерно как на картинке:
По умолчанию, к каждой новой записи уже добавлено условие запуска «Run at load», указывающее на то, что процесс будет запускаться при загрузке системы (или при входе в учетную запись). Намного удобнее настроить расписание для запуска процесса, указав в какие дни недели и какое время должна проводится проверка. Для удаления «Run at load» нажмите на крестик в правой части отведенной для него области. Чтобы добавить условие «Start calendar interval» достаточно перетащить его в рабочую область из списка справа.
В настройке «Start calendar interval» есть шесть параметров: Year, Month, Day, Weekday, Hour, Minute. По умолчанию для всех этих параметров стоит значение «Any». Нажатием на кнопку «Add» можно добавить новый ряд значений для более гибкой настройки. Например, если мы хотим, чтобы скрипт запускался по вторникам и четвергам в 17:00, необходимо использовать две строки значений. В первой строке в столбцах Weeekday, Hour и Minute нужно поставить соответствующие значения Tuesday, 17 и 00. Во второй строке в те же столбцы нужно поставить Thursday, 17 и 00.
Также, если столь гибкая настройка параметров запуска не требуется, вместо «Start Calendar Interval» можно использовать «Start Interval». В «Start Interval» нужно указать всего один параметр: интервал времени между двумя запусками скрипта. Значение указывается в секундах. Соответственно, если мы, например, хотим запускать скрипт каждые 48 часов, то в «Start Interval» нужно ввести значение 172800.
Для того чтобы сохранить наш файл и загрузить его в систему нажимаем кнопку «Load». В открывшемся окне снова нажимаем «Load», затем «Save and Load».
Готово! Теперь система знает о вашем скрипте и будет автоматически запускать его, руководствуясь вашими инструкциями. А вы можете больше не беспокоиться за резервную копию своего компьютера, ведь впредь вы всегда будете в курсе событий, если что-то пойдет не так.
Напоследок хотелось бы продемонстрировать еще один вариант скрипта, который подойдет тем, кто не пользуется почтовым клиентом от Apple. Этот скрипт пользуется встроенным в систему функционалом для отправки email сообщений без использования пользовательских почтовых клиентов. Ему также не требуются учетные данные вашего почтового ящика, что несомненно является плюсом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#Начало остается неизменным: set tmLatest to do shell script "/usr/bin/tmutil latestbackup" set latest to POSIX file tmLatest set mod_date to modification date of (info for latest) set file_age to round (((current date) - mod_date) / hours) log "most recent TM backup " & file_age & " hours old" if file_age > 48 then display notification "Most recent TM backup is " & file_age & " hours old" with title "Time Machine Backups Not Running!!" subtitle "Contact Admin" sound name "Basso" delay 1 set cn to computer name of (system info) #Задаем переменную для темы письма: set SUBJECT to "Резервная копия устарела" #Задаем переменную для тела письма: set EMAILMESSAGE to "Most recent " & cn & " TM backup is " & file_age & " hours old" #Запускаем shell-скрипт для отправки сообщения с заголовком и телом, которые мы указали выше, на нужные нам адреса. Обратите внимание, что адреса разделяются пробелами и все вместе заключены в кавычки! do shell script "echo " & EMAILMESSAGE & " | mail -s " & quoted form of SUBJECT & " first@address.ru second@address.ru" end if |
AppleScript является чрезвычайно мощным и полезным инструментом автоматизации, возможности и области применения которого ограничиваются только фантазией пользователя. Поэтому, если вы заметите в своем рабочем процессе регулярно повторяющиеся действия, возможно имеет смысл научить систему делать их за вас при помощи AppleScript, что поможет вам в дальнейшем сэкономить немало времени и сил.