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

задание cron, которое выполняется в последний понедельник месяца

Мне нужно запускать несколько скриптов cron в последний понедельник каждого месяца.

Мне было интересно, сработает ли объединение диапазонов, например:

8 04 19-26  *  2     $HOME/bin/mailstub

Надеюсь, я правильно понял и что моя задача cron будет запускаться только ОДИН РАЗ в неделю между 19 и 26 числами каждого месяца.

Будем рады услышать комментарии людей,

Я использую CentOS 5.6, поэтому конструкция L, упомянутая в некоторых местах (например, в Википедии), не работает в моей системе.

Заранее спасибо,

Унция

Ваше задание cron будет выполняться во вторник (5-е поле, день недели, 0 или 7 - воскресенье), а не всегда в последний вторник месяца. Лучше было бы использовать:

8 04 * * 1 [ $(date +"\%m") -ne $(date -d 7days +"\%m") ] && $HOME/bin/mailstub

Это проверяет, не совпадает ли текущий месяц с месяцем через 7 дней. Если не равно, то это последний понедельник месяца.

Это настройка, чтобы проходить несколько раз в день. Вы хотите:

0 8 04 19-26 * * MON $ HOME / bin / mailstub

Это произойдет в 8:04:00 в любой день с 19 до 26, то есть в понедельник любого месяца любого года.

Однако, если сегодня понедельник 19 числа, это будет понедельник 26 числа. Следовательно, вы хотели бы иметь его с 19-25

0 8 04 19-25 * * MON $ HOME / bin / mailstub

Так что это должно происходить раз в месяц в понедельник. Тем не менее, это не гарантировано (или вероятно) последний понедельник. Если вам нужно, чтобы он был последним, а синтаксис L не работает, вам нужно запрограммировать логику в вызываемый скрипт. Это легко сделать с помощью Python, но это выходит за рамки этого вопроса.

Я тоже сталкивался с подобным сценарием. Через cron, Мне не удавалось бегать в последний понедельник каждого месяца. Я сделал это через Python.

from datetime import datetime, timedelta
import os

today=datetime.today()
d7d=today+timedelta(days=7)

if today.month != d7d.month:
   os.system('sh /path to shell script')

Запись вкладки cron выглядит так:

0 0 * * 1 / usr / bin / python3 /home/pythonfile.py

Здесь я планирую запуск файла Python каждый понедельник, но сценарий оболочки запускается только в последний понедельник месяца.

По этой логике: if today.month != d7d.month

Здесь я добавляю семь дней к текущей дате и проверяю, отличаются ли месяцы.

Например: 20 июл в понедельник в этот день .py, который мы запланировали через cron, будет выполнен.

20 - jul  = monday
     +7 days
27 - jul  = monday 

Здесь сравниваются месяцы. Если месяц совпадает с логикой, записанной внутри файла Python, будет проигнорирован. Следующий скрипт Python будет выполнен 27 июля.

27 - jul = monday
   +7 days
03 - Aug = monday

Теперь месяцы другие, поэтому наш код будет выполнен. Сценарий оболочки внутри него будет выполнен.