Как настроить, чтобы задача запускалась время от времени?

StackOverflow https://stackoverflow.com/questions/132955

Вопрос

Как мне запустить сценарий каждые, скажем, 30 минут?Я предполагаю, что для разных ОС существуют разные способы.Я использую OS X.

Это было полезно?

Решение

Просто используйте запуск.Это очень мощная система запуска, и в то же время это стандартная система запуска для Mac OS X (без нее текущая версия OS X даже не загрузилась бы).Для тех, кто не знаком с launchd (или с OS X в целом), это что-то вроде помеси между init, cron, at, СисВинит (init.d), inetd, upstart и systemd.Мы заимствуем концепции всех этих проектов, но при этом предлагаем то, чего вы не найдете больше нигде.

Каждая услуга/задача представляет собой файл.Расположение файла зависит от вопросов:"Когда эта услуга должна работать?" и "Какие привилегии нуждаются в службе?"

Системные задачи идут в

/Library/LaunchDaemons/

если они будут запущены, независимо от того, вошел ли какой-либо пользователь в систему или нет.Они будут запущены с правами root.

Если они будут работать только в том случае, если любой пользователь вошел в систему, они переходят на

/Library/LaunchAgents/

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

Если они будут работать, только если ты вошли в систему, они переходят в

~/Library/LaunchAgents/

где ~ — ваш домашний каталог.Эти задачи будут выполняться с вашими привилегиями, как если бы вы запустили их самостоятельно из командной строки или двойным щелчком по файлу в Finder.

Обратите внимание, что существует также /System/Library/LaunchDaemons и /System/Library/LaunchAgents, но как обычно все под /System управляется OS X.Вы не должны размещать там какие-либо файлы, вы не должны изменять там какие-либо файлы, если только вы действительно не знаете, что делаете.Беспорядки в папке «Системы» могут сделать вашу систему непригодной для использования (довести ее до состояния, в котором она даже откажется снова загружаться).Это каталоги, в которых Apple размещает launchd задачи, которые обеспечивают запуск и работу вашей системы во время загрузки, автоматический запуск служб по мере необходимости, выполнение задач по обслуживанию системы и т. д.

Каждый launchd задаче есть файл в формате plist.Он должен иметь обратную запись доменного имени.Например.ты можешь назвать свою задачу

com.example.my-fancy-task.plist

Этот список может иметь различные параметры и настройки.Писать по одному для каждой руки неоптимально, возможно, вы захотите получить бесплатный инструмент. Лингон для создания своих задач.Раньше этот инструмент был бесплатным, теперь он стоит 5 долларов в магазине приложений и 10 долларов за версию без магазина приложений (версия без магазина приложений намного мощнее, и если вы уже планируете платить за нее, серьезно, приобретите версию без магазина приложений). версия).Если кто-нибудь знает аналогичный инструмент, который является бесплатным или открытым исходным кодом, напишите мне в комментариях, и я скорее порекомендую его (не хочу рекламировать здесь коммерческое программное обеспечение).

В качестве примера это может выглядеть так

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.my-fancy-task</string>
    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/usr/local/bin/my-script.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>1800</integer>
</dict>
</plist>

Этот агент будет запускать сценарий оболочки /usr/local/bin/my-script.sh каждые 1800 секунд (каждые 30 минут).Вы также можете запускать задачу в определенные даты/время (по сути, launchd может делать все, что может cron), или вы даже можете отключить «OnDemand», заставляя launchd поддерживать постоянный запуск процесса (если он завершится или выйдет из строя, launchd немедленно перезапустит его) .Вы даже можете ограничить количество ресурсов, которые может использовать процесс (как было сказано ранее, Lingon отображает все эти настройки в красивом пользовательском интерфейсе).

Обновлять: Несмотря на то OnDemand все еще поддерживается, он устарел.Новая настройка называется KeepAlive, что имеет гораздо больше смысла.Он может иметь логическое значение, и в этом случае оно является полной противоположностью OnDemand (установив его на false ведет себя так, как будто OnDemand является true и наоборот).Замечательная новая функция заключается в том, что она также может иметь словарное значение вместо логического.Если у него есть словарное значение, у вас есть несколько дополнительных опций, которые дают вам более точный контроль над тем, при каких обстоятельствах задача должна оставаться активной.Например.он сохраняется активным только до тех пор, пока программа завершилась с нулевым кодом выхода, только до тех пор, пока существует определенный файл/каталог на диске, только если еще одна задача также активна или только если сеть в данный момент работает.

Также вы можете вручную включать/отключать задачи через командную строку:

launchctl <command> <parameter>

Команда может быть загрузкой или выгрузкой, чтобы загрузить список или выгрузить его снова, и в этом случае параметром является путь к файлу.Или командой может быть запуск или остановка, чтобы просто запустить или остановить такую ​​задачу, и в этом случае параметром является метка (com.example.my-fancy-task).Существуют также другие команды и параметры.

См. документацию Apple по формат списка и launchctl инструмент командной строки (обратите внимание, что вы можете выбрать версию OS X сверху, поскольку формат/параметры различаются в разных выпусках OS X)

Другие советы

вы можете использовать очень удобный генератор plist: http://launched.zerowidth.com/ (не нужно ничего покупать...)

он предоставит вам однострочную оболочку для регистрации нового запланированного задания с уже рекомендованным запуск

В MacOSX у вас есть как минимум следующие возможности:

По личному опыту cron самый надежный.Когда я тестировал, в launchd было много ошибок и особенностей.Сигналы тревоги iCal срабатывают только тогда, когда вы вошли в систему (но это может быть то, что вы предпочитаете).

Как отметил Меки, для этого подойдет launchd.Существует графический интерфейс для запуска, который называется Лингон что вы, возможно, захотите проверить, а не редактировать файлы launchd вручную:

Lingon - это графический пользовательский интерфейс для создания файлов конфигурации MEDTITION для Mac OS X Leopard 10.5.

[отрывок...]

Редактирование файла конфигурации проще, чем когда -либо, в этой версии, и он имеет два разных режима.Базовый режим, который имеет наиболее распространенные настройки, легко доступные в очень простом интерфейсе и экспертном режиме, где вы можете добавить все настройки либо непосредственно в текст, либо вставить их через меню.

MAC OS имеет Автомататор Инструмент такой же, как у Диспетчер задач в окнах.А с помощью Automator вы можете планировать задачи на ежедневной основе и связать задачу с повторяющимся событием календаря для ежедневного запуска сценариев в указанное время.ссылка для перехода для ежедневного запуска сценариев в Mac OS

Для яблочных скриптов я настраиваю специальный календарь iCal и использую будильники для их периодического запуска.Для инструментов командной строки я использую launchd.

К вашему сведению:хотя мне очень не хватает простоты, cron в OS X остался в прошлом.Это был пес на пантере.Начиная с Tiger он был запущен.Так что если вы используете Leopard cron, это не вариант.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top