Как я могу сказать cron запускать команду каждый день (нечетный / четный)

При настройке cron для запуска команды каждый день с использованием поля «День месяца», например:

1 22 */2 * * COMMAND 

он запускается каждый раз, когда день месяца нечетный: 1,3,5,7,9 и так далее.

Как я могу настроить cron для работы в дни месяца, которые даже похожи на 2,6,8,10 и т. Д. (Без указания его буквально, что проблематично, поскольку каждый месяц имеет разное количество дней в месяце)?

4 Solutions collect form web for “Как я могу сказать cron запускать команду каждый день (нечетный / четный)”

Синтаксис, который вы пробовали, на самом деле неоднозначен. В зависимости от того, сколько дней в месяце, несколько месяцев он будет работать в нечетные дни, а некоторые – даже. Это связано с тем, что метод, который он вычисляет, принимает общее количество возможностей и делит их. Вы можете переопределить это поведение, указав диапазон дней и используя нечетное или четное количество дней. Поскольку даже дневные скрипты никогда не будут работать в течение 31-го дня более длительных месяцев, вы не потеряете ничего, используя 30 дней в качестве базы для четных дней, и указав конкретно, чтобы разделить его так, как если бы у вас было 31 день, вы можете заставить нечетные -дневное исполнение.

Синтаксис будет выглядеть так:

 # Will only run on odd days: 0 0 1-31/2 * * command # Will only run on even days: 0 0 2-30/2 * * command 

Ваша забота о месяцах, не имеющих одинакового количества дней, здесь не важна, потому что в течение нескольких месяцев не было более двух дней, чем в этом случае, а в случае бедного февраля диапазон дат просто не будет соответствовать последним дням или двум, но это не повредит он указан.

Единственный «способ» для этого подхода состоит в том, что если вы находитесь в нечетном дневном цикле, следуя месяцам с 31 днями, ваша команда также будет работать в первом месяце. Точно так же, если вы заставляете четный цикл, каждый високосный год вызовет один трехдневный цикл и конец февраля. Вы не можете обойти тот факт, что любая регулярная картина «каждый день» не всегда будет падать на четные или нечетные дни в каждом месяце, и любым способом, которым вы это принуждаете, у вас будет либо дополнительный прогон, либо пропущен пробег между месяцев с пропущенными деньгами.

Давайте проверим каждый день, если это «другое» 🙂 (требуется программа bc )

 0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command 

(Я не уверен, что код отображается правильно. date +%s находится между обратными апострофами.)

Я думаю, что возможность использует день года, например:

 # for odd days test $(((`date +%j` % 2))) != 0 && command # for even days test $(((`date +%j` % 2))) == 0 && command 

Он протестирован для систем Unix и Linux.

В общем, я буду запускать его каждый день и использовать сценарий для определения его, если он должен быть запущен сегодня.

Создание простого файла состояния, когда он запускается, а затем компиляция будет работать очень легко.

Если его нужно запускать из разных источников, сделайте его зависимым от аргументов.

  • Crontab останавливается на полпути
  • как временно отключить cronjob пользователя?
  • Когда будет запущен этот cron
  • Как распечатать следующие задачи crontab для выполнения?
  • время crontab для выполнения, не использующее системную 'дату'
  • crontab -e дает: / var / spool / cron /: mkstemp: разрешение отклонено
  • / etc / crontab отредактировано путем копирования и вставки, как вернуться назад?
  • crontab для команды запускать каждую неделю и три месяца?
  • Правильная капитализация «cron»
  • В crontab @reboot работает, но не работает
  • Как я могу узнать, когда была запущена работа cron или она разбилась?
  • Interesting Posts

    Меньше знака после выполнения в сценарии оболочки

    Как исправить это eth0 и eth1, когда трафик, выходящий через eth0, терпит неудачу?

    Разрешить определенным гостям выполнять определенные команды

    Полная изоляция в песочнице Linux

    Добавление работ без >> при перенаправлении стандартного вывода и ошибки

    Режим туннеля IPsec – настройка RoadWarriors

    Любой способ указать процесс вызова в Linux при активации OOM?

    Параметры функции Bash – Пробелы в имени файла

    Где журналы pptp в openSUSE 42.2?

    Как изменить скрипт init на CentOS 7?

    UTF-8 работает в gnome-терминале только после выбора уже выбранной кодировки

    Raid 0 Установка Linux не позволяет установить grub

    Можно ли установить права доступа для каждого пользователя в Linux?

    Предупреждения «Защита IPv6 отключена»

    Есть ли способ манипулировать порядком аргументов stdin при использовании xargs, так же, как awk как $ 0, $ 1, $ 2 и т. Д.?

    Linux и Unix - лучшая ОС в мире.