Как сделать так, чтобы сценарий запускался каждые 30 минут? Я предполагаю, что для разных ОС существуют разные способы. Я использую OS X.
Как сделать так, чтобы сценарий запускался каждые 30 минут? Я предполагаю, что для разных ОС существуют разные способы. Я использую OS X.
Ответы:
Просто используйте 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
Этот список может иметь различные параметры и настройки. Писать по одному на каждую руку - это неоптимально, вы можете получить бесплатный инструмент Lingon для создания своих задач. Раньше этот инструмент был бесплатным, теперь он стоит 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>
команда может быть загружена или выгружена, чтобы загрузить список или выгрузить его снова, и в этом случае параметр - это путь к файлу. Или команда может быть start или stop, чтобы просто запустить или остановить такую задачу, и в этом случае параметром является метка (com.example.my-fancy-task). Также существуют другие команды и опции.
См. Документацию Apple по формату plist и launchctl
инструменту командной строки (обратите внимание, что вы можете выбрать версию OS X сверху, так как формат / параметры различаются между различными выпусками OS X)
StartCalendarInterval
с массивом из двух словарей, как с ключом Minute
и значением один раз 00
и один раз 30
будет делать именно то , что вы просили. Пожалуйста, задавайте вопросы в будущем как вопросы, а не как комментарии, тогда я также могу показать вам окончательный словарь (я не могу сделать это в комментарии). Этот сайт предназначен для того, чтобы задавать вопросы. Если вы хотите намекнуть на вопрос, опубликуйте ссылку на вопрос как комментарий, а не сам вопрос.
вы можете использовать очень удобный генератор списков: http://launched.zerowidth.com/ (не нужно ничего покупать…)
он предоставит вам однострочную оболочку для регистрации нового запланированного задания с уже рекомендованным запуском
В MacOSX у вас есть как минимум следующие возможности:
По личному опыту cron - самый надежный. Когда я тестировал, в launchd было несколько ошибок и причуд. Тревоги iCal запускаются только тогда, когда вы вошли в систему (но это может быть то, что вы предпочитаете).
Как отметил Меки, launchd будет подходящим вариантом. Существует графический интерфейс для launchd под названием Lingon, который вы, возможно, захотите проверить, а не редактировать файлы launchd вручную:
Lingon - это графический пользовательский интерфейс для создания файлов конфигурации launchd для Mac OS X Leopard 10.5.
[отрывок ...]
Редактировать файл конфигурации в этой версии проще, чем когда-либо, и она имеет два разных режима. Базовый режим, который имеет наиболее общие настройки, легко доступные в очень простом интерфейсе, и экспертный режим, в котором вы можете добавлять все настройки либо прямо в текст, либо вставлять их через меню.
В MAC OS есть Automator Tool, который аналогичен планировщику заданий в Windows. А с помощью Automator вы можете планировать задачи на ежедневной основе и связывать задачу с повторяющимся календарным событием, чтобы запускать сценарии в указанное время ежедневно. ссылка для ежедневного запуска скриптов в Mac OS
Для сценариев Apple я установил специальный календарь iCal и использую будильники для их периодического запуска. Для инструментов командной строки я использую launchd.
К вашему сведению: хотя я очень скучаю по его бесполезности, cron ушел в прошлое в OS X. Это был сторожевой пес на пантере. Начиная с Tiger он был запущен. Так что, если вы используете Leopard cron, это не вариант.
Вы можете использовать cron для планирования задач.
crontab -e
Задание указывается в следующем формате.
* * * * * command to execute
│ │ │ │ │
│ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
│ │ │ └──────── month (1 - 12)
│ │ └───────────── day of month (1 - 31)
│ └────────────────── hour (0 - 23)
└─────────────────────── min (0 - 59)
Пример:
0 12 * * * cd ~/backupfolder && ./backup.sh
После того, как вы установили свои задачи cron, вы можете использовать crontab -l для вывода списка своих задач.
crontab -l
Если вы хотите узнать больше о выражениях расписания cron, вы можете получить доступ к
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html