Как запланировать cron на первый четверг каждого месяца - PullRequest
0 голосов
/ 16 октября 2019

Мне нужно запланировать запуск задания cron на 15:00 в первый четверг каждого месяца. Как я могу это сделать? Я читал еще одну тему, похожую на эту, но это первое воскресенье каждого месяца. Как я могу изменить это в соответствии с моими потребностями? Пожалуйста, не направляйте меня к каким-либо руководствам, так как они мне не помогут. Вот почему я задаю вопрос здесь.

Каждое первое воскресенье того самого месяца

00 09 * * 7 [ $(date +\%d) -le 07 ] && /run/your/script

Простой ответ должен быть здесь, я просто не знаю, что за -le 07 расшифровывается как

Итак, 4 - четверг. Что такое -le 07 в кроне?

Это чек на первый седьмой день (воскресенье) месяца?

00 15 * * 4 [ $(date +\%d) -le 07 ] && /run/your/script

Или это должен быть этот номер?

Предполагается, что это будет проверка для первого 4-го дня (четверга) месяца?

00 15 * * 4 [ $(date +\%d) -le 04 ] && /run/your/script

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

Заранее спасибо.

1 Ответ

2 голосов
/ 16 октября 2019

ответ:

0 15 * * 4 [ $(date +\%d) -le 7 ] && command

объяснение:

Прежде всего нужно осознать, что первый четверг месяцавсегда будет день месяца в наборе {1,2,3,4,5,6,7}. Это просто потому, что в неделе всего 7 дней. Таким образом, первый четверг не может иметь день больше 7. То же самое верно и для любого другого дня недели, например, вторника или субботы.

Команда, которую выполнит cron, состоит из двух частей:

  • [ $(date "+\%d") -le 7 ]: Это простой тест, который проверяет, является ли день месяца меньше 7. По сути, он проверяет, находимся ли мы в первой неделе месяца. ,Команда date -d "+%d" возвращает день месяца в виде двузначного числа (01,02,03,...,31) и является строкой. Команда test, здесь написанная в альтернативной форме с квадратными скобками [ ... ], проверяет, не является ли целое число, полученное из date, меньше или равно 7. Вы можете узнать больше об этом, набрав man testв терминале.

  • command: это команда, которая будет выполнена, если предыдущий test будет успешным. Т.е. если мы в первую неделю месяца. Причина, по которой это будет выполняться только в случае успешного выполнения команды test, заключается в &&. Команда вида cmd1 && cmd2 выполнит cmd1, и только тогда, когда она будет успешной, она выполнит cmd2.

Так что, поскольку у нас теперь есть команда, мы можем теперьсоздайте наш файл crontab. С немного большим количеством комментариев (части, начинающиеся с #, вы можете записать это как:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
  0  15 *  *  4   [ $(date +\%d) -le 07 ] && command

. Вышеуказанное означает, выполнить вышеуказанную команду в минуту 0 15-го часа любого четверга. И так какКоманда содержит тест для первой недели, она будет выполняться только в первый четверг месяца.

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