Ответ 1
Просто догадайтесь, но вы не
Лучше взломать голову: напишите script, чтобы отслеживать последний раз, когда он был запущен, и условно запустить его, если он был более 25 часов назад.
Cron, который драйвер script запускается каждый час.
Как настроить cronjob, который запускается каждые 25 часов?
Просто догадайтесь, но вы не
Лучше взломать голову: напишите script, чтобы отслеживать последний раз, когда он был запущен, и условно запустить его, если он был более 25 часов назад.
Cron, который драйвер script запускается каждый час.
Было бы проще выпустить команду at
, определяющую время и дату следующего задания при запуске текущего, но вы может имитировать это с помощью cronjob, обновив запись cronjob для процесса в начале текущего запуска (не в конце 'cos, тогда вам нужно будет учитывать время выполнения задания).
Настройте почасовое задание и проверьте свой script, если прошло 25 часов с этим snipnet:
if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then
your script
fi
Вы можете достичь любой частоты, если считаете часы (, минуты, дни или недели) с 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
Вы можете использовать команды "sleep" или "watch" для запуска script в цикле. Просто убедитесь, что вы выполняете script.
Я думаю, вы должны попробовать это
0 */25 * * * ...