Подтвердить что ты не робот

Cron каждые три дня

Можно ли запускать cronjob каждые три дня? Или, может быть, 10 раз/месяц.

4b9b3361

Ответ 1

Запустите его каждые три дня...

0 0 */3 * *

Как насчет этого?

Если вы хотите, чтобы он запускался в определенные дни месяца, например, 1-й, 4-й, 7-й и т.д., тогда вы можете просто иметь условное выражение в script, которое проверяет текущий день месяца.

if (((date('j') - 1) % 3))
   exit();

или, как указывает @mario, вы можете использовать дату ('k'), чтобы получить день года вместо того, чтобы делать это в зависимости от дня месяца.

Ответ 2

* * */3 * *  that says, every minute of every hour on every three days. 

0 0 */3 * *  says at 00:00 (midnight) every three days.

Ответ 3

Поскольку cron является "без гражданства", он не может точно выражать "частоты", а только "шаблоны", которые он (по-видимому) постоянно соответствует текущему времени.

Перефразируя свой вопрос, это становится более очевидным: "Можно ли запускать cronjob в 00:01 утра каждую ночь, кроме пропусков, когда он бежал в течение 2 ночей?" Когда cron сравнивает текущее время с шаблонами времени запроса заданий, не может cron знать, выполнял ли он свою работу в прошлом.

(возможно, вы можете написать cron с состоянием, который записывает прошлые задания и, таким образом, включает в себя шаблоны для сопоставления с этим состоянием, но это не стандартный cron, включенный в большинство операционных систем. Такая система осложнится, требуя введения понятие о том, когда такие шаблоны "reset". Например, это шаблон reset, когда время изменяется (т.е. запись crontab пересматривается)? Посмотрите на свое любимое приложение календаря, чтобы увидеть, насколько сложно он может выразить Повторяя шаблоны запланированных событий и обратите внимание, что у них нет проблемы с reset, потому что в событии начального календаря есть естественная дата "start" a/k/a "reset". Попробуйте перепланировать каждую неделю повторяющееся событие календаря для отсрочки на неделю, например, на Рождество. Обычно вам нужно прекратить это повторяющееся событие и перезапустить совершенно новый, что иллюстрирует ограниченную выразительность того, как даже сложные приложения для календаря представляют повторяющиеся шаблоны. И, конечно, календари hav e много состояний - каждое отдельное событие может быть удалено или перенесено независимо [в большинстве приложений для календаря]).

Кроме того, вы, вероятно, захотите выполнять свою работу каждую третью ночь в случае успеха, но если последняя не удалась, повторите попытку сразу, возможно, на следующую ночь (не ждать еще 3 дня) или даже раньше, как через час ( но перестаньте повторять попытку при утреннем прибытии). Ясно, что cron не мог знать, была ли ваша работа успешной, и шаблон не может также выражать альтернативный более частый "повторный" график.

ANYWAY-- Вы можете делать то, что хотите. Напишите script, скажите cron, чтобы запустить его в ночное время в 00:01. Этот script может проверить временную метку чего-то *, который записывает "последний прогон", а если он был > 3 дня назад **, выполните задание и reset отметку времени "последнего запуска".

(* этот индикатор с меткой времени является немного сохраняемым состоянием, которое вы можете манипулировать и проверять, но который не может cron)

** будьте осторожны с временной арифметикой, если вы используете человеко-читаемое время часов - два раза в год, в некоторые дни - 23 или 25 часов в день, а 02: 00-02: 59 происходит дважды за один день или совсем нет. Используйте UTC, чтобы избежать этого.

Ответ 4

0 0 1-30/3 * *

Это будет работать каждые три дня, начиная с 1-го. Вот 20 запланированных прогонов -

  • 2015-06-01 00:00:00
  • 2015-06-04 00:00:00
  • 2015-06-07 00:00:00
  • 2015-06-10 00:00:00
  • 2015-06-13 00:00:00
  • 2015-06-16 00:00:00
  • 2015-06-19 00:00:00
  • 2015-06-22 00:00:00
  • 2015-06-25 00:00:00
  • 2015-06-28 00:00:00
  • 2015-07-01 00:00:00
  • 2015-07-04 00:00:00
  • 2015-07-07 00:00:00
  • 2015-07-10 00:00:00
  • 2015-07-13 00:00:00
  • 2015-07-16 00:00:00
  • 2015-07-19 00:00:00
  • 2015-07-22 00:00:00
  • 2015-07-25 00:00:00
  • 2015-07-28 00:00:00

Ответ 5

Как насчет:

00 00  *  *   * every 3 days && echo test

Где every - script:

#!/bin/sh

case $2 in
    days)
        expr `date +%j` % $1 = 0 > /dev/null
        ;;

    weeks)
        expr `date +%V` % $1 = 0 > /dev/null
        ;;

    months)
        expr `date +%m` % $1 = 0 > /dev/null
        ;;
esac

Итак, он работает каждый день.

Использование */3 выполняется на 3-м, 6-м,... 27-м, 30-м месяцах, но затем неверно через месяц 31-й день. every script является неправильным только после конца года.

Ответ 6

Было бы проще, если бы вы настроили его просто запустить, например. в понедельник и в четверг, что дало бы ему 3 и 4-дневный перерыв.

В противном случае настройте его для ежедневного запуска, но сначала сделайте свой php cron script с помощью:

if (! (date("z") % 3)) {
     exit;
}

Ответ 7

Если вы хотите, чтобы он запускался в определенные дни месяца, например, 1-й, 4-й, 7-й и т.д., тогда вы можете просто иметь условное выражение в script, которое проверяет текущий день месяца.

Я думал, что все, что вам нужно для этого, было вместо */3, что означает каждые три дня, используйте 1/3, что означает каждые три дня, начиная с 1-го числа месяца. поэтому 7/3 будет означать каждые три дня, начиная с 7 числа месяца и т.д.

Ответ 8

Вы должны изучить основы crontab.

Отредактируйте cron командой crontab -e, а затем ⌃ (CTRL) + X, затем Y и, наконец, нажмите ENTER (return) на mac, чтобы сохранить файл. Вы можете проверить, что новые кроссы установлены не на crontab -l

В файле crontab есть пять полей для указания минут, часов, дня месяц, месяц и день недели, за которым следует команда выполняться на этом интервале.

*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of        month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

* в поле значения выше означает все допустимые значения, как в фигурных скобках для этого столбца.

Здесь я написал подробное сообщение об этом: Настройка Cron в Unix

Ответ 9

Я не специалист по cron, но как насчет:

0 */72 * * *

Он будет работать каждые 72 часа без прерывания.

https://crontab.guru/#0_/72___

Ответ 10

0 0 * * * [ $(($(( date +% - j - 1)) % 3)) == 0 ] && script

Получите день года от date, смещенный на 1, чтобы начать с 0, проверьте, является ли это по модулю три.