CronJob каждые 25 минут

Раздел Red Hat Enterprise Linux 6 Installation Guide 9.17. Выбор Package Group предоставляет некоторую информацию, но это не очень:

По умолчанию, Red Hat Enterprise, процесс установки Linux загружает выбор программного обеспечения, которое подходит для системы, развернутой как основной сервер. Обратите внимание, что эта установка не включает графическую среду. Для включения выбора программного обеспечения, подходящего для других ролей, нажмите переключатель, который соответствует одной из следующих опций:

Основной сервер

Эта опция обеспечивает базовую установку Red Hat Enterprise Linux для использования на сервере.

Рабочий стол

Эта опция обеспечивает пакет программ для повышения производительности OpenOffice.org, графические инструменты такой как> GIMP и мультимедийные приложения.

Минимальный

Эта опция обеспечивает только пакеты, важные для выполнения Red Hat Enterprise Linux. Минимальная установка обеспечивает основание для специализированного сервера или настольного устройства и максимизирует производительность и безопасность на такой установке.

12
20.07.2011, 15:23
6 ответов

Команда в crontab выполняется с /bin/sh таким образом, можно использовать арифметическое расширение, чтобы вычислить, является ли текущая минута по модулю 25 нулем.

*/5 * * * * [ $(( $(date +%s) / 60 % 25 )) -eq 0 ] && your_command

cron будет выполнять целую команду каждые 5 минут, но только если текущая минута (в минутах с эпохи) по модулю 25 является нулем, будет он работать your_command.

Как другие указали, 1 день не является равномерно делимым на 25 минут, таким образом, это не вызовет your_command для выполнения одновременно каждый день но это будет работать каждые 25 минут.

14
27.01.2020, 19:54
  • 1
    , просто приветливый... классная идея –  Tomas 11.08.2011, 02:12
  • 2
    , что с реализацией крона от ISC, по крайней мере, необходимо будет выйти из тех символов % с обратной косой чертой. –  Stéphane Chazelas 20.05.2015, 09:25

Ваш лучший выбор состоит в том, чтобы достигнуть в 20 минут или 30 минут.

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

Более сложный должен был бы отработать корректные времена в течение дня, запускающегося в полночь, и принять ошибку в конце дня. Это включило бы дублирование crontab записи в различные часы.

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

Наконец Вы могли всегда реализовывать свое собственное на демоне и иметь, которые делают планирование.

7
27.01.2020, 19:54

У меня нет прямого опыта с ним, но fcron, кажется, делает то, что Вы хотите из поля. Согласно его документации можно указать частоты:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh
6
27.01.2020, 19:54
  • 1
    Где Вы видите 25 минут здесь? –  Philomath 21.07.2011, 13:56
  • 2
    Используя fcron и @ 25 command должен добиться цели. –  Caleb 21.07.2011, 15:40
  • 3
    Спасибо Caleb. Я должен был создать адаптированный пример вместо того, чтобы снять один подряд с документации. –  che2cbs 21.07.2011, 19:57

Позвольте мне объяснить короче говоря, что является проблемой здесь. Ввод 25 в мелких полевых причинах cron выполниться, когда минуты текущего времени равняется 25, который является раз в час. Можно ввести список соответствий, проблема состоит в том, что 60 (минуты часа) не передаваемо по наследству 25, таким образом, необходимо добавить несколько записей на основе часа. Наименьшее общее кратное 60 и 25 300, который равняется 5 * 60. таким образом, необходимо будет циклически повториться в течение 5 часов до возврата исходному запуску. например:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Но здесь снова, 24 (часы день) не передаваемо по наследству 5, наименьшее общее кратное 5 и 24 равняется просто 5 * 24 = 120. И так вперед и вперед...

1
27.01.2020, 19:54
  • 1
    Возможно, ответ должен был быть комментарием к исходному вопросу. –  Philomath 21.07.2011, 21:49

Можно играть со временем последнего изменения файла

  • Создайте немного сценария (например, /usr/local/bin/age) это произведет возраст файла:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Ваш crontab был бы похож на это (предположение, что 25 минут равняются 1 500 секундам, если я прав),

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Обратите внимание, что я использую /var/tmp вместо /tmp потому что согласно FHS это, как предполагается, не удалено на завершении работы системы / запуск.

1
27.01.2020, 19:54

Я думаю, что следующее должно работать 0 0/25 * * *?

-2
27.01.2020, 19:54
  • 1
    Согласно моему знанию это будет работать в течение каждой минуты. –   20.07.2011, 15:30
  • 2
    Это выполнилось бы на часе один раз в... 25 часов? 0/25... даже не уверенный, что это делает, но это не то, что OP после. –  Caleb 21.07.2011, 01:01

Теги

Похожие вопросы