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

Будет ли это работать правильно?

CELERYBEAT_SCHEDULE = {
    'task-number-one': {
        'task': 'project.users.tasks.send_something',
        'schedule': crontab(minute='*/2880'),
    }
}

2 ответа

Нет, это не сработает. Минуты могут быть только частями часа и не учитывать временные рамки, превышающие один час.

В реальном синтаксисе cron это будет работать:

2 2 */2 * *  do_something   
## run every 2nd day at 2:02

Прочитайте документы, чтобы узнать, как это переводится в синтаксис Celery.

Обратите внимание: он всегда сбрасывается в начале месяца, поэтому в конце месяца с 29 или 31 днем ​​он будет запущен снова через 24 часа.

Я не знаю каждую реализацию cron, но обычно / символ может использоваться для представления шага, но шаги не переносятся за пределы конца серии.

т.е. в течение нескольких минут серия только 0,1,2,3, ... 59, И на самом деле только шаги до 30 будет иметь смысл как шаг */31 будет таким же, как указано *"запускать в минуту 31" и то же самое для каждого другого целого числа от 31 до 59.

Так minute='*/2880' не будет работать, как вы собираетесь.

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

В bash это будет выглядеть примерно так:

#!/bin/bash
# This batch will only run when 420 seconds (7 min) have passed
# since the file /tmp/lastrun was either created or updated

if [ ! -f /tmp/lastrun ] ; then
    touch /tmp/lastrun
fi

if [ $(( $(date +%s) - $(date -r /tmp/lastrun +%s) )) -lt 420 ] ; then
    echo "The minimum interval of 7 minutes between successive batches hasn't passed yet."
    exit
fi

echo "Start running your batch"

date > /tmp/lastrun

Который вы можете затем безопасно (попытаться) запустить каждую минуту:

* * * * * /path/to/your/job

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

Другие вопросы по тегам