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

Я хочу знать, есть ли более простой способ запуска работы каждые 25 минут. В cronjob, если вы укажете минутный параметр как * / 25, он будет работать только на 25-й и 50-й минутах каждого часа

6 Solutions collect form web for “CronJob каждые 25 минут”

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

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

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

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

Лучше всего работать в 20 минут или 30 минут.

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

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

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

Наконец, вы можете реализовать свой собственный всегда на демонах, и у вас есть планирование.

У меня нет прямого опыта, но 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 

Позвольте мне коротко объяснить, в чем проблема. Ввод 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. & так далее и далее …

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

  • Создайте небольшой скрипт (например, /usr/local/bin/age ), который выведет возраст файла:

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

Ваш crontab будет выглядеть так (если 25 минут равны 1500 секундам, если я прав)

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

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

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

  • tput: Нет значения для $ TERM и не указано -T
  • AWS CLI - не работает в crontab
  • как установить переменную PATH crontab
  • Logrotate не запускает proftpd triggerd cronjob
  • Передача mp3-файлов с удаленного сервера через cronjob в RPi без перезаписи
  • Проблема с использованием звукового сигнала crontab
  • Как добавить crontab в FreeBSD
  • Сценарий очистки с помощью find и anacron
  • Сценарий оболочки, выполняемый с cron, приводит к разному размеру файла, чем выполняется вручную
  • Запуск сценария R и глобальной переменной, переопределяющей << - от cron
  • Как я могу удалить все файлы в папку, к которой не было доступа за определенное время?
  • Linux и Unix - лучшая ОС в мире.