Мне нужно запускать несколько скриптов 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
Теперь месяцы другие, поэтому наш код будет выполнен. Сценарий оболочки внутри него будет выполнен.