синтаксический запрос crontab

#syntax #crontab

#синтаксис #cron

Вопрос:

что означает этот синтаксис crontab

 "*/15 * * * 2-5"
  

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

 "*/55 * * * 2-5"
  

по какой-то причине это, похоже, не сработало.

Можете ли вы объяснить, что такое * / в начале?

Спасибо

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

1. 2-5 — со вторника по пятницу

2. ах да, извините, это основано на 0, я исправил свой вопрос.

Ответ №1:

Ваш первый пример должен быть в порядке, если вы хотите, чтобы он запускался каждые 15 минут. 2-5 на 5-й позиции имеется в виду со вторника по пятницу.

Чего вы хотите достичь с помощью */55 ?

Хорошее объяснение синтаксиса можно найти в Википедии:

Звездочка ( *)

Звездочка указывает, что выражение cron будет соответствовать всем значениям поля; например, использование звездочки в 4-м поле (месяц) будет указывать на каждый месяц.

Косая черта ( / )

Косые черты используются для описания приращений диапазонов. Например, 3-59 / 15 в 1-м поле (минуты) будет указывать 3-ю минуту часа и каждые 15 минут после этого. Форма «*/…» эквивалентна форме «0-59/…».

Ответ №2:

*/xx означает каждые xx единиц времени.

В вашем примере */15 означает каждые 15 минут => :15 :30 :45

*/55 Будет выполняться каждые 55 минут, скрипт будет запускаться через 55 минут после каждого часа (10:55, 11:55, 12:55….)

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

1. Я полагаю, что * / 55 будет запускаться, как вы упоминаете, каждые 55 минут, что означает 10:55, 11:50, 12:45, и т.д.

Ответ №3:

 "*/15 * * * 2-5"
  

*/15 ЭТО не означает, что он выполняется каждые 15 минут после каждого часа… /15 является индикатором шага, что означает, что он выполняется каждые 15 минут (т. е. 4 раза в час)

Со страницы руководства:

 > man 5 crontab

Steps are also permitted after an asterisk, 
so if you want to say ``every two hours'', 
just use ``*/2''.
  

Поэтому используйте */ обозначение только в том случае, если вы хотите запускать что-то повторно, т.Е.. несколько раз в час, несколько раз в день и т.д.

Питер

Ответ №4:

вопреки народным преданиям, */xx не означает каждые xx единиц времени.

шаблон / означает приблизительно каждые xx единиц времени, но не в конце диапазона.

это работает только там, где xx равномерно делится на единицу (т. Е. на минуты или секунды, то есть только /2, /3, /4, /5, /6, /8, и /12)

например, */ 5 будет повторяться каждые 5 дней большую часть времени, за исключением случаев в конце месяцев, когда он повторяется через 1, 2 или 4 дня, в зависимости от месяца и переходного периода.

поскольку 55 так близко к 60, это действительно будет работать так, как вы задумали, но просто по совпадению (из-за округления). если бы вы написали */ 25, он выполнялся бы два раза в час, в:25 и:50

Ответ №5:

Ответ Хайме Герроро близок к правильному поведению в RHEL 7.2. Вот мои выводы. С записью cron в виде

 */55 * * * * /root/test.sh amp;>> /root/output.log
  

Я получаю поведение

 === Start /root/test.sh Wed May 18 19:55:01  ===
=== Start /root/test.sh Wed May 18 20:00:01  ===
=== End /root/test.sh Wed May 18 20:02:35  ===
=== End /root/test.sh Wed May 18 20:03:44  ===
  

Объяснение из wiki,https://en.wikipedia.org/wiki/Cron

например, ввод * / 5 в поле день иногда выполняется через 1, 2 или 3 дня, в зависимости от месяца и високосного года; это потому, что cron не имеет состояния (он не запоминает время последнего выполнения и не учитывает разницу между ним и сейчас, необходимую для точного подсчета частоты — вместо этого cron является простым сопоставителем шаблонов).