2009-09-13 3 views
10

Как настроить крону, которая запускается каждые 25 часов?Cronjob каждые 25 часов?

+1

Что это за цель? Почему 24 часа неприемлемы? –

+0

См. Также: http://stackoverflow.com/questions/745901/how-to-do-a-cron-job-every-72-minutes – mob

+2

Пришел от Google с использованием законного варианта использования, чтобы избежать превышения ежедневный лимит API для периодического задания, которое не особенно чувствительно к времени. Добавление дополнительного часа, чтобы быть консервативным и избегать ошибок на летнем свете. – mahemoff

ответ

16

Только предположение, но вы не

Лучший хак с верхней части моей головы: написать скрипт для отслеживания в последний раз он был запущен, и условно запустить его, если это было больше, чем 25 несколько часов назад.

Cron, чтобы сценарий драйвера запускался каждый час.

7

Было бы проще выдать команду at, определяющую время и дату следующего задания при запуске текущего, но вы могли бы имитировать это с помощью cronjob, обновив запись cronjob для процесса в начале текущего (не в конце), тогда вам нужно будет учитывать время выполнения задания).

+0

Уловка 'at' может выйти из строя, если вы пропустите одно задание, например, если система не работает, когда она запланирована. –

0

Вы можете использовать команды «sleep» или «watch» для запуска сценария в цикле. Просто убедитесь, что вы выполняете скрипт.

2

Настройка почасовой работы и проверить в сценарии, если 25 часов в прошлое с этим snipnet:

if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then 
your script 
fi 
+0

Дополнительные комментарии были бы оценены. Этот код генерирует временную метку (секунды с эпохи), преобразует ее в часы и проверяет по модулю 25 (следовательно, каждые 25 часов). При необходимости изменить «-eq 0» на «-eq 10», чтобы изменить час в определенный день ... – darkless

-1

Я думаю, вы должны попробовать это

0 */25 * * * ... 
+2

Вы не можете установить часовую частоту более 23 – erdomester

+0

24, похоже, работает в Debian. –

1

Вы можете достичь любой частоты, если считать часы (, минуты, дни или недели) с Epoch, добавьте условие в начало вашего скрипта и установите сценарий для запуска каждый час на вашем кронтабе:

#!/bin/bash 

hoursSinceEpoch=$(($(date +'%s/60/60'))) 

# every 25 hours 
if [[ $(($hoursSinceEpoch % 25)) -ne 0 ]]; then 
    exit 0 
fi 

date(1) возвращает текущую дату, мы отформатировать его в секундах с начала эпохи (%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 

И вы можете использовать этот подход с ежеминутно, ежечасно, ежедневно или ежемесячно хрон рабочих мест:

#!/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's say, every 13 days 

if [[ $(($days % 13)) -ne 0 ]]; then 
    exit 0 
fi 

# and your actual script starts here 
Смежные вопросы