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 * * * ...