Как настроить cronjob, который запускается каждые 25 часов?
Cronjob каждые 25 часов?
Ответ 1
Просто догадайтесь, но вы не
Лучше взломать голову: напишите script, чтобы отслеживать последний раз, когда он был запущен, и условно запустить его, если он был более 25 часов назад.
Cron, который драйвер script запускается каждый час.
Ответ 2
Было бы проще выпустить команду at
, определяющую время и дату следующего задания при запуске текущего, но вы может имитировать это с помощью cronjob, обновив запись cronjob для процесса в начале текущего запуска (не в конце 'cos, тогда вам нужно будет учитывать время выполнения задания).
Ответ 3
Настройте почасовое задание и проверьте свой script, если прошло 25 часов с этим snipnet:
if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then
your script
fi
Ответ 4
Вы можете достичь любой частоты, если считаете часы (, минуты, дни или недели) с Epoch, добавьте условие в начало вашего script и установите script для запуска каждый час на вашем кронтабе:
#!/bin/bash
hoursSinceEpoch=$(($(date +'%s / 60 / 60')))
# every 25 hours
if [[ $(($hoursSinceEpoch % 25)) -ne 0 ]]; then
exit 0
fi
date(1)
возвращает текущую дату, мы отформатируем ее как секунды с Epoch (%s
), а затем делаем основные математические данные:
# .---------------------- bash command substitution
# |.--------------------- bash arithmetic expansion
# || .------------------- bash command substitution
# || | .---------------- date command
# || | | .------------ FORMAT argument
# || | | | .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command
# || | | | |
# ** * * * *
$(($(date +'%s / 60')))
# * * ---------------
# | | |
# | | ·----------- date should result in something like "1438390397 / 60"
# | ·-------------------- it gets evaluated as an expression. (the maths)
# ·---------------------- and we can store it
И вы можете использовать этот подход с точными, ежечасными, ежедневными или месячными заданиями cron:
#!/bin/bash
# We can get the
minutes=$(($(date +'%s / 60')))
hours=$(($(date +'%s / 60 / 60')))
days=$(($(date +'%s / 60 / 60 / 24')))
weeks=$(($(date +'%s / 60 / 60 / 24 / 7')))
# or even
moons=$(($(date +'%s / 60 / 60 / 24 / 656')))
# passed since Epoch and define a frequency
# let say, every 13 days
if [[ $(($days % 13)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
Ответ 5
Вы можете использовать команды "sleep" или "watch" для запуска script в цикле. Просто убедитесь, что вы выполняете script.
Ответ 6
Я думаю, вы должны попробовать это
0 */25 * * * ...