Назад | Перейти на главную страницу

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

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

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

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

В реальном синтаксисе 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.