Intereting Posts
Преобразование файла с целыми числами, написанными в ascii, в двоичный файл целых чисел Как успешно скопировать и вставить с помощью мыши из tmux Как загрузить определенные файлы с некоторого URL-адреса с помощью wget Как отслеживать время соединения ssh, время отключения и время простоя? Перенаправить консоль на последовательный порт Является ли `chmod -R ugo + rwx /` безопаснее, чем `chmod -R 777 /`? Как изменить формат даты на экране LXDM для входа / приветствия (LXDE) Является ли Openbox менеджером окон без репарации? Прокрутите только архив данных .zip только для чтения, чтобы извлечь строку из файла .kml в попробуйте загрузить файл с сервера, если известен путь Как определить, какой процесс вызывает высокий уровень использования ЦП Howdo я избегаю старых версий mysqlclient Разделение нескольких определенных файлов из многих в каталог с помощью терминала? В чем разница между датой изменения и датой модификации inode? начинает регистрацию, когда лимиты попадают

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

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

1 22 */2 * * COMMAND 

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

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

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

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

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

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