Как отформатировать эти два сложных оператора cron?

Мне нужны два очень конкретных заявления cron:

  1. Запись cron, которая будет работать во второй понедельник каждого месяца каждые 4 часа, начиная с 02:00, и выполнить файл /opt/bin/cleanup.sh

  2. Запись cron, которая будет работать в 18:15 в третий день каждого месяца, заканчивающийся на «r», который выполняет /opt/bin/verrrrrrrry.sh

Я уже пробовал различные тестеры cron:

cron checker , cron tester и cron translator

однако ни один из них, похоже, не может обрабатывать расширенные выражения cron (или я не знаю, как отформатировать правильное выражение), как указано в

учебник триггера cron и википедия

Как я могу проверить свои заявления cron? Я, очевидно, не могу дождаться прохождения фактического события, чтобы демон смог их выполнить.

Есть ли хороший тестер cron, который поддерживает расширенные выражения? Или как заставить демона cron проанализировать выражение или как закодировать эти выражения?

Что я до сих пор делал для этих заявлений:

  1. 0 2 * * 0#2 /opt/bin/cleanup.sh
  2. 15 18 3 * * /opt/bin/verrrrrrrry.sh

Но, конечно, это неверно.

Для # 1 я не знаю, как указать «2-й понедельник», а не «каждые 4 часа», а еще начинать в 02:00.

Для №2 я понятия не имею, как указывать только месяцы, заканчивающиеся на «r», за исключением их ручной кодировки. Я также не знаю, как указать третий день.

  • Как распечатать следующие задачи crontab для выполнения?
  • crontab исключает только определенную дату
  • Выполнение cron 9 до 5 и в полночь
  • Может grep | crontab уничтожить все рабочие места?
  • В чем смысл косой черты в кронтабе?
  • Работы Cron работают на 1 час, в общем несогласие с системными временами
  • Правильная капитализация «cron»
  • Где мой файл журнала crontab?
  • 3 Solutions collect form web for “Как отформатировать эти два сложных оператора cron?”

    Чтобы что-то выполнялось только во второй понедельник месяца, значение дня недели должно быть 1, а значение дня месяца должно быть 8-14, час должен быть 2,6,10,14,18,22 и минута 0. Однако, поскольку dhag правильно прокомментировал и предоставил решение, когда вы укажете как день недели, так и день месяца (т. е. не как * ), программа выполняется, когда либо совпадает. Поэтому вам нужно явно протестировать один из них, а день недели проще:

      0 2,6,10,14,18,22 8-14 * * test $(date +\%u) -eq 1 && /opt/bin/cleanup.sh 

    Финал 1 определяет понедельник, а диапазон дня месяца (8-14) выбирает его только тогда, когда он второй понедельник.

    Третий день каждого месяца, заканчивающийся «r» в 18:15:

      15 18 3 september,october,november,december * /opt/bin/verrrrrrrry.sh 

    (по крайней мере, на Vixie cron вы можете использовать имена месяцев. Если ваш не поддерживает, то вы можете заменить это на 9-12 )

    Формат – минуты / час / день месяца / месяца / дня недели

    Так что это сделало бы

    0 4 9-15 * 2 /opt/bin/cleanup.sh и

    15 18 3 8-14 * /opt/bin/verrrrrrrry.sh

    Запись cron, которая будет работать во второй понедельник каждого месяца каждые 4 часа, начиная с 02:00

     00 02/4 8-14 * * [ `date +\%u` = 1 ] && /opt/bin/cleanup.sh 
    • http://crontab.guru/#00_02/4_8-14_*_1

    Запись cron, которая будет работать в 18:15 на 3-й день каждого месяца, заканчивающийся на «r»,

     15 18 3 9-12 * /opt/bin/verrrrrrrry.sh 
    • http://crontab.guru/#15_18_3_9-12_*
    Linux и Unix - лучшая ОС в мире.