2009-09-13 10 views
10

Jak skonfigurować cronjob uruchamiany co 25 godzin?Cronjob co 25 godzin?

+1

Jaki jest tego cel? Dlaczego 24 godziny nie są akceptowane? –

+0

Zobacz także: http://stackoverflow.com/questions/745901/how-to-a-cron-job-every-72-minutes – mob

+2

Przyszedłem tutaj od Google z legit użycia, który ma na celu przekroczenie dzienny limit API dla okresowej pracy, która nie jest szczególnie wrażliwa na czas. Dodanie dodatkowej godziny do zachowania konserwatywności i uniknięcie błędów w dziennym oświetleniu. – mahemoff

Odpowiedz

16

tylko przypuszczenie, ale ty nie

Najlepszy Hack poza czubek głowy: napisać skrypt do śledzenia czasu ostatniego uruchomienia i uruchomić go warunkowo, jeśli to było więcej niż 25 godzinę temu.

Cron to skrypt sterownika uruchamiany co godzinę.

7

Łatwiej byłoby wydać polecenie at określające datę i godzinę następnego zadania po uruchomieniu bieżącego, ale można je symulować za pomocą cronjob, aktualizując wpis cronjob dla procesu na początku bieżącego biegnij (nie na końcu, bo wtedy musisz wziąć pod uwagę czas na wykonanie pracy).

+0

Sztuczka 'at' może się nie powieść, jeśli pominięto jedno zadanie, np. Jeśli system nie działa, gdy ma zostać uruchomiony. –

0

Można użyć poleceń "uśpienia" lub "obejrzenia", aby skrypt działał w pętli. Upewnij się tylko, że skrypt został wykonany.

2

Konfiguracja praca godzinowa i sprawdzić w skrypcie czy 25 godzin to przeszłość z tym snipnet:

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

Więcej komentarzy byłoby docenionych. Ten kod generuje znacznik czasu (sekundy od epoki), zamienia go na godziny i sprawdza modulo 25 (stąd co 25 godzin). W razie potrzeby zmień "-eq 0" na "-eq 10", aby zmienić godzinę w konkretnym dniu ... – darkless

-1

Myślę, że powinieneś spróbować tej

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

Nie można ustawić częstotliwości godzinnej większej niż 23 – erdomester

+0

24 wydaje się działać w Debianie. –

1

można osiągnąć dowolną częstotliwość jeśli liczyć godziny (, minuty, dni lub tygodnie) od Epoch, dodaj warunek do początku skryptu i ustaw skrypt tak, by działał co godzinę w twoim pliku crontab:

#!/bin/bash 

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

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

date(1) powraca aktualna data, możemy formatować go jako sekundach od Epoki (%s), a następnie robimy podstawowe matematyki:

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

A może użyć tego podejścia z drobiazgowo, co godzinę, codziennie lub co miesiąc crona:

#!/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