специальное выражение cron: как создать исключение?

#linux #cron

#linux #cron

Вопрос:

Я создал cron для выполнения задачи каждый вторник в 3:50 утра — за исключением вторника, который совпадает с первым днем месяца:

 50 3 * * 2 MyCommand
  

но я не знаю, как я могу перевести свое исключение в синтаксис cron, какие-нибудь советы?

Комментарии:

1. Я думаю, вам нужно поместить скрипт-оболочку вокруг вашей команды, который просто отказывается запускаться, если день месяца — 1-й.

2. вот о чем я думал 🙂

Ответ №1:

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

В качестве примера, в bash вы можете сделать это:

 #!/bin/bash

dayofmonth=`date  "%d"`
if [ $dayofmonth == "01" ];
then
# do not run, exit
exit
fi

# otherwise go on

echo "it is not the first"
  

Итак, ваш cron будет

 30 5 * * 2 /path/to/script # comment: script conditional in place to not run on the 1st
  

Комментарии:

1. Спасибо, я думаю, это должно решить мою проблему, даже если по-другому

2. Да, я думаю, вам придется сделать это таким образом. Надеюсь, вы не были привязаны к тому, чтобы просто делать это в cron. Из того, что я знаю о cron, вы не смогли бы создать подобное исключение. Итак, вам нужно будет создать исключение в скрипте. Удачи!

Ответ №2:

Вы можете установить для поля «день месяца» диапазон 2-31, фактически исключая первый день. Это должно сделать это:

 50 3 2-31 * 2 MyCommand
  

Комментарии:

1. Спасибо, я думаю, что это должно выполнять мою команду не каждый вторник, а все дни между (2-31), а также каждый вторник, не так ли?

2. Я думаю, что @user3196353 верен в том смысле, что приведенный выше ответ будет выполняться со 2 по 31 число каждого месяца и 1-го, если это случится во вторник. Страница руководства на crontab гласит: «Наконец, если месяц или день месяца указаны как элемент или список, и день недели также указан как элемент или список, то должен быть сопоставлен любой день, соответствующий либо месяцу, либо дню месяца, либо дню недели».

3. Спасибо, извините, вы, ребята, правы, и этот ответ, вероятно, следует отклонить соответствующим образом.