Я хочу знать, есть ли какой-нибудь более легкий способ выполнять работу каждые 25 минут. В cronjob, если вы укажете параметр минуты как * / 25, он будет запускаться только на 25-й и 50-й минуте каждого часа
13
Команда в 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, кажется, делает то, что вы хотите из коробки. Согласно его документации вы можете указать частоты:
источник
@ 25 command
должно сделать свое дело.Позвольте мне вкратце объяснить, в чем здесь проблема. Ввод 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
), который будет выводить возраст файла:Ваш crontab будет выглядеть так (при условии, что 25 минут равны 1500 секундам, если я прав)
Обратите внимание, что я использую
/var/tmp
вместо того,/tmp
потому что в соответствии с FHS он не должен быть удален при выключении системы / запуске.источник
Я думаю, что следующее должно работать 0 0/25 * * *?
источник