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

Как запланировать задание на раз в две недели?

crontab (5) определяет следующие поля:

       field         allowed values
       -----         --------------
       minute        0-59
       hour          0-23
       day of month  1-31
       month         1-12 (or names, see below)
       day of week   0-7 (0 or 7 is Sun, or use names)

и объясняет:

 Step values can be used in conjunction with ranges.  Following a range
 with ``/<number>'' specifies skips of the number's value through the
 range.  For example, ``0-23/2'' can be used in the hours field to specify
 command execution every other hour (the alternative in the V7 standard is
 ``0,2,4,6,8,10,12,14,16,18,20,22'').

Так что, насколько я понимаю, работы раз в две недели нет. Я уверен, что есть обходные пути, какие у вас? Или я что-то упустил?

Вы можете запускать эту штуку с помощью cron каждую среду, а затем запускать ее, чтобы решить, четная это неделя или нечетная. например:

#!/bin/bash
week=$(date +%U)
if [ $(($week % 2)) == 0 ]; then 
    echo even week
else 
    echo odd week
fi

Многие кроны (вы не указали, что используете) поддерживают диапазоны. Так что-то вроде

0 0 1-7,15-21 * 3

Попадут в первую и третью среду месяца.

Для чего-то, что нужно запускать раз в две недели, используйте этот однострочник:

0 0 * * 5 [ `expr \`date +\%V\` \% 2` -eq 0 ] && echo "execute script" 

Этот конкретный сценарий планируется запускать по пятницам. Неделю, которую нужно выполнить, можно настроить с помощью "-eq 0" или "-eq 1".

Если ваши потребности не раз в две недели, вы можете просто запустить cronjob 1-го и 15-го числа месяца:

15 8 1,15 * * /your/script.sh

Который работает в 8:15 утра первого и пятнадцатого числа каждого месяца независимо от дня недели.

Анакрон - хороший способ обойти ограничения cron.

  • Анакрон имеет Период повторения параметр, который можно установить на 14.

команда идентификатора задания задержки периода

14 15 test.daily /path/to/script.sh

Из этого объяснения параметр 3/2 в поле недели должен запускать задачу каждую вторую среду - это неявно, но я думаю, выполнимо.