Автоматизация рутины в OS X. Урок 21. Скрипты по расписанию

Автоматизация рутины в OS X. Урок 21. Скрипты по расписанию

Сегодня мы научимся делать отложенный запуск автоматизирующих скриптов: разберемся как превратить JavaScript-код в исполняемый файл и назначить время его запуска. Этот навык еще больше повысит уровень продуктивности читателя при работе с OS X и его можно будет применить к любой программе, из разобранных в предыдущих уроках.

Для того чтобы настроить время выполнения скрипта нам нужно сделать следующее:

  1. Превратить его в исполняемый файл.
  2. Добавить информацию о его запуске в crontab с помощью утилиты launctl.

Разберем как это сделать шаг за шагом.

Упаковываем скрипт в исполняемый файл

Выполняем JXA из командной строкиДля примера напишем простой скрипт, который будет открывать приложение Mail и отображать напоминание о том, что надо не забыть написать письмо.

// Кладем в переменную приложение «Mail» 

app = Application("Mail");

// Включаем использование элементов графического интерфейса
app.includeStandardAdditions = true;

// Отображаем всплывающие окно
app.displayAlert("Не забыть написать письмо!");

Проверим, правильно ли выполняется код и сохраним его в файле MailReminder.scpt в корневом каталоге текущего пользователя. Утилита launchtl не работает с файлами формата scpt, в которых хранятся скрипты, написанные на JavaScript. Поэтому нам нужно превратить его в исполняемый файл.

Теперь открываем любой текстовый редактор и набираем в его окне следующую строку:

osascript MailReminder.scpt

Сохраняем этот текстовый файл под именем example.command. Делаем это в корневом каталоге текущего пользователя. Теперь открываем «Терминал» и вводим там следующую команду:

chmod +x example.command

Теперь файл example.command стал исполняемыми. Если кликнуть на файле example,command в Finder, то программа выполнится и появится окно с напоминанием отправить письмо.

Настраиваем время выполнение исполняемого файла

Создаем файл со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.alvin.crontabtest</string>

<key>ProgramArguments</key>
<array>
<string>/Users/Irina/example.command</string>
</array>

<key>SomeKey</key>
<integer>1</integer>

<key>StartInterval</key>
<integer>600</integer>

<key>RunAtLoad</key>
<true/>

<key>StandardErrorPath</key>
<string>/tmp/AlTest1.err</string>

<key>StandardOutPath</key>
<string>/tmp/AlTest1.out</string>
</dict>
</plist>

В параметре StartInterval указывается через какой промежуток времени необходимо повторять выполнение скрипта. Значение прописывается в секундах.

Назовем файл com.irina.crontabtest.plist и сохраним его в папке $HOME/Libraries/LaunchAgents.

Сохраняем наш plist-файлТеперь войдем в систему и сообщим утилите launchtl о том, что в расписание нужно добавить новое действие.

sudo launchctl load /Libraries/LaunchAgents/com.irina.crontabtest.plist

Если в выполнении действия отпала необходимость, то его можно отменить с помощью команды unload.

sudo launchctl unload /Libraries/LaunchAgents/com.irina.crontabtest.plist

Стоит обратить внимание, что для добавления любых команд в расписание необходимы права суперпользователя (root).

Как заставить скрипт выполняться в определенный день недели?

Для этого в файле с расширением plist вместо параметра StartInterval необходимо прописать параметр SetCalendarInterval. Пример:

<key>StartCalendarInterval</key>
<dict>
  <key>Hour</key>
  <integer>3</integer>
  <key>Minute</key>
  <integer>15</integer>
  <key>Weekday</key>
  <integer>6</integer>
</dict>

Эти строчки говорят нам, что программу, указанную в файле, надо выполнять каждую субботу в 3 часа 15 минут.

Предыдущие публикации из цикла «Автоматизация рутины в OS X» вы можете найти по следующим ссылкам:

Что еще почитать:


✅ Подписывайтесь на нас в Telegram, ВКонтакте, и Яндекс.Дзен.



Добавить комментарий