Как мне установить задачу для запуска так часто?
Как мне запустить скрипт каждые, скажем, 30 минут? Я предполагаю, что есть разные способы для разных ОС. Я использую OS X.
7 ответов:
просто использовать launchd. Это очень мощная система запуска, а между тем это стандартная система запуска для Mac OS X (текущая версия OS X даже не загрузится без нее). Для тех, кто не знаком с
launchd
(или с OS X в целом), это как скрещивание междуinit
,cron
,at
, SysVinit (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
этот plist может иметь различные параметры и настройки. Написание одного на руку является неоптимальным, вы можете получить бесплатный инструмент брусники для создания ваших задач. Этот инструмент раньше был бесплатным, теперь он стоит $ 5 в app store и $10 в качестве версии без app store (версия без app store намного мощнее и если вы уже планируете платить за это, серьезно, получите версию без app store). Если кто-нибудь знает сопоставимый инструмент, который является бесплатным или открытым исходным кодом, напишите Мне строку в комментариях, и я скорее рекомендую ее (не хочу рекламировать здесь коммерческое программное обеспечение).
просто в качестве примера, это может выглядеть так
<?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>
команда может быть load или unload, чтобы загрузить plist или выгрузить его снова, в этом случае параметром является путь к файлу. Или команда может быть start или stop, чтобы просто запустить или остановить такую задачу, в этом случае параметр-это метка (com.example. my-fancy-task). существуют также другие команды и параметры.
см. документацию Apple по формат plist и
launchctl
командная строка (обратите внимание, что вы можете выбрать версию OS X сверху, так как формат / параметры различаются между различными выпусками OS X)
вы можете использовать очень удобный генератор plist:http://launched.zerowidth.com/ (не нужно ничего покупать...)
Это даст вам оболочку один лайнер, чтобы зарегистрировать новое запланированное задание с уже рекомендованным launchd
на MacOSX, у вас есть по крайней мере следующие варианты:
из личного опыта, cron является наиболее надежным. Когда я тестировал, launchd имел ряд ошибок и причуд. iCal сигналы тревоги запускаются только при входе в систему (но это может быть то, что вы предпочитаете).
Как отметил Меки, launchd был бы способом пойти с этим. Есть графический интерфейс для launchd называется Lingon что вы можете проверить, в отличие от редактирования файлов launchd вручную:
Lingon-это графический пользовательский интерфейс для создания редактирования launchd файлы конфигурации для Mac OS X Leopard 10.5.
[СНиП...]
Редактирование файла конфигурации проще, чем когда-либо в этой версии и это имеет два различных режима. Основной режим, который имеет наиболее распространенный настройки легко доступны в очень простом интерфейсе и экспертном режиме где вы можете добавить все настройки либо непосредственно в текст, либо вставить их через меню.
Mac имеет инструмент Automator, который такой же, как у планировщика задач в windows. Но с помощью Automator вы можете запланировать задачу на ежедневной основе и связать задачу с повторяющимся событием календаря для запуска скриптов в указанное время ежедневно. см. ссылку для запуска скриптов на ежедневной основе в Mac OS