Как запланировать cron на 1-ю, 2-ю и 3-ю неделю и на определенный день недели?

У вас установлены пакеты из репозитория «обновлений», которые новее, чем те, что находятся на носителе ISO, в котором есть пакеты только с исходной даты этого выпуска. Yum не может получить зависимости (, поскольку кажется, что вы отключили обновления ), потому что обновленный пакет glibc требует установки заголовков glibc -той же версии, которая недоступна.

1
22.05.2021, 14:53
1 ответ

Оригинальный ответ на исходный вопрос.

Вам нужно что-то вроде этого:

0 1 1-21 * * [ $(date +\%u) -eq 3 ] && "call your command/script here"

Это расписание 0 1 1-21 * *означает запуск заданий "в 01 :00:00 каждый день --месяца с 1 по 21; теперь возникает вопрос, почему мы ограничиваемся 1 -21? Ответ заключается в том, что в лучшем случае 1 число месяца будет уже запущено в среду (, поэтому мы выбрали1 ), и crontab будет запускаться 1 число , 8 число и 15 числа дня --месяца;

И в худшем случае это будет последний день первой недели (день 7 ), поэтому crontab будет запущен 7 го , 14 го и21числа числа --месяца; поэтому мы ограничили количество рабочих дней до 1 ~21 дня месяца.

Но тогда man -s 5 crontabговорит:

Note: The day of a command's execution can be specified by two fields — day of month, and day of week. If both fields are restricted (i.e., don't start with *), the command will be run when e̲i̲t̲h̲e̲r̲ field matches the current time.

и поэтому мы выбираем только день -месяца -и ставим *в качестве дня -недели -:

crontab-job

вместо того, чтобы указывать день -недели -в crontab, как указано выше, мы обрабатываем это, выполняя простуюtestоболочкой с [ $(date +\%u) -eq 3 ]; это проверяет, является ли день -недели -третьим днем ​​недели, т.е. является ли это средой; (0 -6 дня -числа -недели, 0 Пн,...., 6 Вс ), затем выполните команду/скрипт.


Ответ на пересмотренный вопрос.

0 1 * * 3 [ $(date +\%m) -eq $(date -d'+7days' +\%m) ] && scriptA.sh || scriptB.sh

Если это не последняя среда ([ $(date +\%m) -eq $(date -d'+7days' +\%m) ], с помощью этого мы проверяем, что сегодняшняя среда -месяц $(date +\%m)+7 дней спустя (следующая среда -месяц$(date -d'+7days' +\%m))находится в том же месяце, так что это не последняя среда, тогда будет выполняться scripA.sh, иначе это последняя среда, и будет выполняться scriptB.sh.

с указанным выше, scriptA.sh будет выполняться каждую среду месяца, кроме последней среды, в которую затем будет выполняться scriptB.sh.

Конечно, можно переместить эти тесты внутрь скрипта[AB].sh вместо того, чтобы усложнять записи в crontab.

1
28.07.2021, 11:30

Теги

Похожие вопросы