#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 является простым сопоставителем шаблонов).