Введение
В прошлом вы могли создавать запись конфигурации cron для каждой задачи, которую нужно было запланировать на своем сервере. Однако это может быстро стать проблемой, потому что ваше расписание задач не находится в системе управления версиями и вы должны подключаться по SSH для просмотра существующих записей cron или добавления дополнительных записей.
Планировщик команд Laravel предлагает новый подход к управлению запланированными задачами на вашем сервере. Планировщик позволяет вам быстро и выразительно определять расписание команд в самом приложении Laravel. При использовании планировщика на вашем сервере требуется только одна запись cron. Расписание задач определяется в методе файла . Для начала работы в методе определен простой пример.
Записи¶
Чтобы периодически вызывать задачу, необходимо добавить запись в список расписания ударов.
from celery import Celery from celery.schedules import crontab app = Celery() @app.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): # Calls test('hello') every 10 seconds. sender.add_periodic_task(10.0, test.s('hello'), name='add every 10') # Calls test('world') every 30 seconds sender.add_periodic_task(30.0, test.s('world'), expires=10) # Executes every Monday morning at 7:30 a.m. sender.add_periodic_task( crontab(hour=7, minute=30, day_of_week=1), test.s('Happy Mondays!'), ) @app.task def test(arg): print(arg) @app.task def add(x, y): z = x + y print(z)
Установка их из обработчика означает, что при использовании мы не будем оценивать приложение на уровне модуля
Обратите внимание, что отправляется после установки приложения, поэтому задачи вне модуля, в котором объявлено приложение (например, в файле tasks.py, расположенном по ), должны использовать более поздний сигнал, например
Функция добавит запись в настройку за кадром, и эту же настройку можно использовать для установки периодических заданий вручную:
Пример: Запускайте задачу tasks.add каждые 30 секунд.
app.conf.beat_schedule = { 'add-every-30-seconds' { 'task' 'tasks.add', 'schedule' 30.0, 'args' (16, 16) }, } app.conf.timezone = 'UTC'
Примечание
Если вы задаетесь вопросом, где должны находиться эти настройки, пожалуйста, смотрите . Вы можете либо установить эти параметры непосредственно в вашем приложении, либо оставить отдельный модуль для настройки.
Если вы хотите использовать кортеж из одного элемента для args, не забудьте, что конструктор — это запятая, а не пара круглых скобок.
Использование для расписания означает, что задание будет отправляться с интервалом в 30 секунд (первое задание будет отправлено через 30 секунд после запуска celery beat, а затем каждые 30 секунд после последнего запуска).
Существует также расписание, подобное Crontab, см. раздел .
Как и в случае с cron, задачи могут накладываться друг на друга, если первая задача не завершится раньше следующей. Если это вызывает беспокойство, следует использовать стратегию блокировки, чтобы гарантировать, что одновременно может выполняться только один экземпляр (см., например, ).
Работа с задачами
Для примера запустим скрипт резервного копирования каждый день в 23:00.
Как добавить задачу (способ № 1)
Открываем редактор с расписанием для текущего пользователя
и добавляем строчку:
В таком случае имя пользователя указывать не нужно.
Как добавить задачу (способ № 2)
Второй способ — создать файл с расписанием в каталог — например, :
Как удалить задачу
Это можно сделать как минимум тремя способами:
- Удалить файл с заданием.
- Удалить строчку из файла.
- Закомментировать строчку.
Независимо от выбранного способа, для того чтобы cron обновил список действующих расписаний,
необходимо перезапустить службу:
Использование команды Crontab
Здесь мы покажем вам некоторые наиболее важные команды, которые используются для планирования автоматизированных задач с помощью команды Crontab.
Список задач Cron
Используйте следующую команду для получения списка запланированных заданий Cron для текущего авторизованного пользователя.
crontab –l
В команде вывода покажет вам весь список задач, работающих под управлением этого пользователя. Если вы хотите отобразить задания другого пользователя, то мы можем проверить это с помощью следующей команды.
crontab –l –u username
Это будет список задач где упоминалось имя пользователя: .
Редактирование задач Cron
Чтобы добавить новую задачу или отредактировать существующую, мы будем использовать следующую команду Crontab.
crontab -e
Удалить задачу Cron
Команда может быть использована для удаления запланированных заданий Cron.
crontab –r
Это удалит все задачи без запроса подтверждения. Используйте , если вы хотите, чтобы задачи удалялись в интерактивном режиме .
crontab -ir
anacron
anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:
* * * выполняемая_команда - - - | | | | | --------- идентификатор | ----------- задержка ------------- период
Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания — любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.
На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:
В Linux есть такой чудо демон — cron. Демон cron при загрузке, а так же — после загрузки каждую минуту «шерстит» файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в «просматриваемом» файле и запускает указанную команду, когда значения полей минута, час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.
Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.
Как использовать crotab
Команда crontab используется для открытия и редактирования/добавления заданий cron. Демон cron, запущенный в Linux, выполняет запланированные задания во время, определенное в crontab ( таблица cron). Основным общесистемным файлом crontab является файл /etc/crontab.
Cron по умолчанию установлен в большинстве дистрибутивов Linux. Каждый пользователь в системе Linux может управлять своими собственными заданиями cron. Каждый пользовательский cron хранится в папке /var/spool/cron/crontabs/ (может быть разным в разных дистрибутивах). Демон cron запускает как пользовательский, так и системный crontab.
Демон Cron имеет определенный путь $PATH по умолчанию, который вы можете найти в файле /etc/crontab. Если его не определить, либо используйте абсолютный путь, либо добавьте в переменную cron $PATH. Это стоит учитывать при написании заданий.
Уведомление по почте Cron по умолчанию отправляется владельцу кронтаба. Чтобы изменить это, отредактируйте переменную среды MAILTO.
Журналы Cron хранятся в системном журнале /var/log/syslog в системах Ubuntu/Debian и в /var/log/cron в Redhat/Rocky Linux. Вы можете отфильтровать файл журнала с помощью команды grep, чтобы проверить, успешно ли выполнено задание cron или нет.
1. Редактировать/добавить задание для Crontab
Для редактирования (существующих заданий) или добавления нового cron используйте команду crontab -e. Это откроет редактор для текущего пользователя.
Чтобы отредактировать файл crontab другого пользователя, введите:
Или просто запустите команду crontab -e, войдя в систему от имени этого пользователя.
2. Список задач Cron
Чтобы просмотреть список всех заданий текущего пользователя, введите:
Чтобы просмотреть список всех заданий cron для указанного пользователя, введите:
3. Удалить задачу cron
Чтобы удалить все задания cron текущего пользователя, выполните следующую команду:
Примечание: Это приведет к удалению всех заданий cron без запроса подтверждения.
Если вы хотите удалить в интерактивном режиме, вам нужно использовать следующую команду:
Примеры заданий для Crontab
Давайте проверим некоторые примеры crontab для планирования заданий cron.
1. Запускать задания cron каждые 12 часов
Это помогает при регулярных проверках системы или резервном копировании. Чтобы запланировать выполнение задачи каждые 12 часов, введите:
2. Запускать задание cron каждые 5 минут
Иногда вам нужно следить за своей системой каждые n минут. Используйте следующее выражение для выполнения задачи каждые 5 минут.
3. Запускать работу cron каждый день в 2 часа ночи
Ежедневное резервное копирование может быть запланировано на определенное время. Следующее выражение запускает задание cron каждый день в 2 часа ночи.
Чтобы запланировать работу cron каждый день в 2 часа дня, cron использует 24-часовые часы.
7. Пример задания cron для запуска каждую субботу в 1 час ночи
Это поможет вам запустить резервное копирование в субботу в определенное время. Следующее выражение помогает выполнять работу cron каждую субботу в 1 час ночи.
13. Запуск задания cron ежемесячно
Вместо использования 0 0 1 * *, вы можете использовать ярлык с помощью @monthly. Он работает в 00:00 1-го числа месяца. В качестве альтернативы вы можете разместить свой скрипт в /etc/cron.monthly/.
14. Запуск задания cron еженедельно
Вместо использования 0 0 * * mon, вы можете использовать ярлык с помощью @weekly. Он начинается в 00:00 в понедельник. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.weekly/.
15. Запуск задания cron ежедневно
Вместо использования 0 0 * * *, вы можете использовать ярлык с помощью @daily. Это работает каждый день в 00:00. В качестве альтернативы вы можете разместить свой сценарий в файле /etc/cron.daily/.
16. Выполнение задания cron каждый час
Вместо использования 0 */1 * * *, вы можете использовать ярлык с помощью @hourly. Он работает в 0 минут каждый час. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.hourly/.
17. Запуск задания cron при перезагрузке
Для запуска задачи при каждой перезагрузке системы используйте строку @reboot. Скрипт будет выполнен после перезагрузки.
18. Запуск задания для cron каждые 30 секунд
Cron позволяет работать только с минутами. Не существует простого способа запланировать выполнение задания каждые 30 секунд.
Но мы можем использовать обходной путь, увеличив задержку на 30 секунд.
19. Запустите задание cron и перенаправить вывод
Если наш скрипт имеет какой-то вывод, нам, возможно, захочется его увидеть. Для этого можно сохранить его в отдельный файл. Этот пример позволит запускать php-скрипт каждые 3 минуты и перенаправлять вывод в файл.
Обратите внимание что тут используются абсолютные пути, так как мы не определили нашу переменную $PATH
Резервное копирование заданий cron
Для бекапа задач cron, можно использовать следующую команду:
Для бекапа задач cron определенного пользователя:
Чтобы восстановить cron из файла резервной копии, просто используйте:
Ограничение доступа
Вы можете управлять тем, каким пользователям разрешается использовать команду , с помощью файлов и , которые хранятся в директории . Если файл существует, любой пользователь, который будет указан в нем, не будет иметь возможность менять файл crontab. Если существует, то только пользователи, указанные в нем, будут иметь возможность изменять файлы crontab. Если оба файла существуют, и пользователь указан в каждом файле, файл будет иметь приоритет над , и этот пользователь сможет изменять файл crontab.
Например, чтобы запретить доступ для всех пользователей, а затем предоставить доступ пользователю ishmael, вы можете использовать следующую последовательность команд:
Сначала мы закрываем доступ для всех пользователей, добавив в файл . Затем, добавив имя пользователя в файл , мы предоставим пользователю ishmael доступ к выполнению задач cron.
Обратите внимание, что если пользователь имеет права , он может изменять файл crontab другого пользователя с помощью следующей команды:
Однако, если существует, и user добавлен в него, но не указан в файле , вы получите следующую ошибку после запуска предыдущей команды:
По умолчанию большинство демонов cron полагает, что все пользователи имеют доступ к cron, если только не существует или .
Запуск планировщика
Теперь, когда мы узнали, как определять планирование задачи, давайте обсудим, как же запускать их на нашем сервере. Команда Artisan проанализирует все ваши запланированные задачи и определит, нужно ли их запускать, исходя из текущего времени сервера.
Итак, при использовании планировщика Laravel нам нужно добавить только одну конфигурационную запись cron на наш сервер, которая запускает команду каждую минуту. Если вы не знаете, как добавить записи cron на свой сервер, то рассмотрите возможность использования такой службы, как Laravel Forge, которая может управлять записями cron за вас:
Отключение уведомлений по почте от Crontab на Linux и Unix-подобных системах
Отключение отправки ошибок и вывода от задач cron
Для предотвращения отправки ошибок и вывода, добавьте любую из следующих строк в конец каждой задачи cron для перенаправления вывода в /dev/null.
>/dev/null 2>&1
ИЛИ
> /dev/null
ИЛИ
> /dev/null 2>&1 || true
Примеры задач cron
Отредактируйте/откройте ваши задачи cron, для этого наберите:
crontab -e
Добавьте строку >/dev/null 2>&1 для прекращения предупреждений по почте:
0 1 5 10 * /path/to/script.sh >/dev/null 2>&1
ИЛИ
0 1 5 10 * /path/to/script.sh > /dev/null
ИЛИ
0 * * * * /path/to/command arg1 > /dev/null 2>&1 || true
Сохраните и закройте файл.
Установка переменной MAILTO
Вы можете установить переменнюу MAILTO=»» в начале вашего файла crontab. Это также отключит предупреждения по почте. Отредактируйте/откройте ваш файл с задачами cron:
crontab -e
В самый верх этого файла добавьте:
MAILTO=""
Сохраните и закройте файл.
Есть ли альтернативы Cron?
В то время как cron является в значительной степени стандартным планировщиком задач для Linux. , это, конечно, не единственный. Команда at идеально подходит для быстрых одноразовых заданий, которые можно запланировать прямо из командной строки, без специальных файлов конфигурации. Если вам нужно больше, есть GNUbatch , который вводит понятие зависимости. С помощью GNUbatch вы можете установить конкретные условия для каждого задания или сделать запланированное задание зависимым от предыдущего. Нечто подобное можно достичь с помощью системных таймеров . Хотя таймеры systemd менее удобны в настройке, чем cron, системные запоминающие устройства могут помнить, пропустила ли задача свое расписание, когда компьютер был выключен, и запускать его при следующем включении.
Это то, что cron не может сделать в одиночку. Таким образом, он подходит для серверов и компьютеров, которые постоянно работают, но он не будет выполнять работу, которая была запланирована, когда компьютер был выключен. Это где анакрон вступает в игру. Технически это не «альтернатива» или замена cron. Вместо этого anacron дополняет cron и должен использоваться вместе с ним, что имеет место во многих дистрибутивах Linux, включая продукты на основе Ubuntu и Ubuntu. Anacron регистрирует время последнего выполнения задачи и проверяет наличие пропущенных экземпляров при выключении системы. Он будет запускать их при включении компьютера, но каждую задачу можно выполнять только один раз в день.
Некоторые версии cron, такие как fcron, по умолчанию предлагают функции anacron. Опытные пользователи, возможно, захотят взглянуть на Hcron или SuperCron , которые вносят множество улучшений в базовые функции cron, но в то же время являются сложными в управлении.
Планирование задач с помощью Crontab
Теперь мы начинаем использовать задачи с помощью конфигурационного файла, который находится в то время как существуют различные способы использования Cron. Вы найдете некоторые каталоги, как , , и т.д. Так что, если вы поместите сценарий задачи в один из этих каталогов, то они будут запускаться по графику в зависимости от имени каталога.
Система Crontab
Эти задания Cron используются системными службами и критическими задачами, которые требуются привилегии корневого уровня. Мы можем проверить общесистемный crontab в файле .
Crontab пользователя
Пользовательские задания уровня хрон задаются отдельно для каждого пользователя, так что каждый пользователь может создавать свои собственные задачи с помощью команды .
Мы можем проверить или редактировать пользовательские задания уровня хрон с помощью следующей команды.
crontab –e
После выбора редактора вы сможете настроить свои новые рабочие места хрон здесь.
Примеры расписаний cron
Каждую минуту:
* * * * *
Каждую 1 минуту:
* * * * *
Каждые 2 минуты:
*/2 * * * *
Каждую чётную минуту:
*/2 * * * *
Каждую нечётную минуту:
1-59/2 * * * *
Каждые 3 минуты:
*/3 * * * *
Каждые 4 минуты:
*/4 * * * *
Каждые 5 минут:
*/5 * * * *
Каждые пять минут:
*/5 * * * *
Каждые 6 минут:
*/6 * * * *
Каждые 10 минут:
*/10 * * * *
Каждые десять минут:
*/10 * * * *
Каждую четверть часа:
*/15 * * * *
Каждые 20 минут:
*/20 * * * *
Каждые 30 минут:
*/30 * * * *
Каждый час в 30 минут:
*/30 * * * *
Каждые полчаса:
*/30 * * * *
Каждые 60 минут:
0 * * * *
Каждый час:
0 * * * *
Каждый 1 час:
0 * * * *
Каждые 2 часа:
0 */2 * * *
Каждые два часа:
0 */2 * * *
Каждый чётный час:
0 */2 * * *
Каждый другой час:
0 */2 * * *
Каждые 3 часа:
0 */3 * * *
Каждые три часа:
0 */3 * * *
Каждые 4 часа:
0 */4 * * *
Каждые 6 часов:
0 */6 * * *
Каждые шесть часов:
0 */6 * * *
Каждые 8 часов:
0 */8 * * *
Каждые 12 часов:
0 */12 * * *
Каждый день:
0 0 * * *
Каждую ночь:
0 0 * * *
Каждую ночь в 1 час:
0 1 * * *
Каждую ночь в 2 часа:
0 2 * * *
Каждый день в 8 часов:
0 8 * * *
Каждое утро:
0 9 * * *
Каждую полночь:
0 0 * * *
Каждый день в полночь:
0 0 * * *
Каждую ночь в полночь:
0 0 * * *
Каждое воскресенье:
0 0 * * SUN
Каждый понедельник:
0 0 * * MON
Каждый вторник:
0 0 * * TUE
Каждую среду:
0 0 * * WED
Каждый четверг:
0 0 * * THU
Каждую пятницу:
0 0 * * FRI
Каждую пятницу в полночь:
0 0 * * FRI
Каждую субботу:
0 0 * * SAT
Каждый рабочий день:
0 0 * * 1-5
Каждые 7 дней:
0 0 * * 0
Каждую неделю:
0 0 * * 0
Каждый месяц:
0 0 1 * *
Каждый другой месяц:
0 0 1 */2 *
Каждый квартал:
0 0 1 */3 *
Каждые 6 месяцев:
0 0 1 */6 *
Каждый год:
0 0 1 1 *
Как проверить, выполняются ли задания Cron
Предполагается, что Cron работает тихо в фоновом режиме и позволяет вам работать без помех, пока он выполняет ваши задачи. Но как вы можете убедиться, что это на самом деле работает?
Cron имеет встроенную функцию уведомлений по электронной почте, но для этого требуется настроить хотя бы простой локальный почтовый сервер. почтовый сервер Не многие домашние пользователи желают настроить это, и не многие дистрибутивы предоставляют его по умолчанию (например, Ubuntu этого не делает). Самый быстрый способ проверить cron — это просмотреть системный журнал с помощью этой команды:
Опция -i делает наш запрос нечувствительным к регистру. Возможно, что у cron будет свой собственный файл журнала где-нибудь в , поэтому посмотрите, не сможет ли эта команда дать полезные результаты.
Если вам нужно сохранить вывод определенного задания cron, вы можете перенаправить его в файл. Укажите путь и имя файла в последнем столбце вашего crontab после команды, которую вы хотите выполнить:
Использование одного символа> перезапишет файл при каждом запуске команды. Чтобы избежать этого, используйте >> вместо этого — он добавляет вывод в существующий файл.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
Вы можете удалить все существующие задачи командой -r:
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:
Далее, усложним, будем запускать каждый час, в нулевую минуту:
Еще дальше:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
Если идти так дальше, то можно запускать в первый день каждого месяца:
Можно в любой день, например, 15 числа:
В первый день недели первого месяца года, 0 часов 0 минут:
Или в нулевой день недели каждого месяца:
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:
Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:
Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
- @reboot — при загрузке, только один раз;
- @yearly, @annually — раз год;
- @monthly — раз в месяц;
- @weekly — раз в неделю;
- @daily, @midnight — каждый день;
- @hourly — каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
Отладка работы
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.
Crontab format
The basic format for a crontab is:
minute hour day_of_month month day_of_week command
- minute values can be from 0 to 59.
- hour values can be from 0 to 23.
- day_of_month values can be from 1 to 31.
- month values can be from 1 to 12.
- day_of_week values can be from 0 to 6, with 0 denoting Sunday.
Spaces are used to separate fields. To fine-tune your schedule you may also use one of the following symbols:
Symbol | Description |
---|---|
* | Wildcard, specifies every possible time interval |
, | List multiple values separated by a comma. |
— | Specify a range between two numbers, separated by a hyphen |
Specify a periodicity/frequency using a slash |
For example, the line:
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh
will execute the script at five minute intervals from 9 AM to 4:55 PM on weekdays except during the summer months (June, July, and August).
In addition, crontab has some special keywords:
@reboot at startup @yearly once a year @annually ( == @yearly) @monthly once a month @weekly once a week @daily once a day @midnight ( == @daily) @hourly once an hour
For example:
@reboot ~/bin/i_love_cron.sh
will execute the script at startup.
More examples and advanced configuration techniques can be found below.
Солнечные графики¶
Если у вас есть задание, которое должно выполняться в соответствии с восходом, закатом, рассветом или сумерками, вы можете использовать тип расписания :
from celery.schedules import solar app.conf.beat_schedule = { # Executes at sunset in Melbourne 'add-at-melbourne-sunset' { 'task' 'tasks.add', 'schedule' solar('sunset', -37.81753, 144.96715), 'args' (16, 16), }, }
Аргументы просты:
Обязательно используйте правильный знак для обозначения широты и долготы:
Подписаться |
Аргумент |
Смысл |
Север |
||
Юг |
||
Восток |
||
Запад |
Возможными типами событий являются:
Событие |
Смысл |
Выполните в момент, после которого небо уже не будет полностью темным. Это происходит, когда солнце находится на 18 градусов ниже горизонта. |
|
Выполняется, когда солнечного света достаточно, чтобы горизонт и некоторые объекты были различимы; формально, когда солнце находится на 12 градусов ниже горизонта. |
|
Выполняйте, когда света достаточно для того, чтобы объекты были различимы, и можно было приступать к активному отдыху; формально, когда Солнце находится на 6 градусов ниже горизонта. |
|
Выполняется, когда верхний край солнца появляется над восточным горизонтом утром. |
|
Выполняется, когда солнце находится выше всего над горизонтом в этот день. |
|
Выполняется, когда край солнца исчезает над западным горизонтом в вечернее время. |
|
Выполняйте в конце гражданских сумерек, когда объекты еще различимы и видны некоторые звезды и планеты. Формально, когда солнце находится на 6 градусов ниже горизонта. |
|
Выполняется, когда солнце находится на 12 градусов ниже горизонта. Объекты больше не различимы, а горизонт больше не виден невооруженным глазом. |
|
Выполнить в момент, после которого небо становится полностью темным; формально, когда солнце находится на 18 градусов ниже горизонта. |
Все солнечные события рассчитываются по UTC, поэтому на них не влияют настройки вашего часового пояса.
В полярных регионах солнце может всходить и заходить не каждый день. Планировщик способен обрабатывать такие случаи (т.е. событие не будет выполняться в день, когда солнце не восходит). Единственным исключением является , которое формально определяется как момент прохождения солнца через небесный меридиан, и будет происходить каждый день, даже если солнце находится ниже горизонта.
Сумерки определяются как период между рассветом и восходом солнца, а также между закатом и сумерками. Вы можете запланировать событие в соответствии с «сумерками» в зависимости от вашего определения сумерек (гражданские, морские или астрономические), а также от того, хотите ли вы, чтобы событие произошло в начале или конце сумерек, используя соответствующее событие из списка выше.