Jak ustawić cron, aby uruchamiał określone polecenia co półtorej godziny?Jak ustawić cron, aby uruchamiał określone polecenia co półtorej godziny?
Odpowiedz
Czy istnieje dobry powód, dla którego nie można korzystać z 1 godziny lub 2 godzin? Na pewno byłoby prostsze.
nie próbowałem tego osobiście, ale można znaleźć kilka informacji tutaj na uzyskanie cron uruchomić co 90 minut: http://keithdevens.com/weblog/archive/2004/May/05/cron
excert z powyższego linku:
0 0,3,6,9,12,15,18,21 * * * <commands>
30 1,4,7,10,13,16,19,22 * * * <commands>
To nie jest możliwe z pojedynczym wyrażeniem w normalnym cron
.
Najlepiej można to zrobić bez modyfikowania kodu jest:
0 0,3,6,9,12,15,18,21 * * * [cmd]
30 1,4,7,10,13,16,19,22 * * * [cmd]
Są może być ściśliwy, w zależności od wersji crona trzeba:
0 */3 * * * [cmd]
30 1-23/3 * * * [cmd]
Dwie linie w crontab. Wzdłuż linii:
0 0,3,6,9,12,15,18,21 * * * /usr/bin/foo
30 1,4,7,10,13,16,19,22 * * * /usr/bin/foo
Możesz to zrobić z dwoma wpisami crontab.Każdy kursuje co trzy godziny i są przesunięte o 90 minut mniej więcej tak:
0 0,3,6,9,12,15,18,21 * * *
30 1,4,7, 10,13,16,19,22 * * *
można też użyć fcron który akceptuje także bardziej złożone wymagania czasowe, takie jak:
@ 01h30 my_cmd
#! /bin/sh
# Minute Cron
# Usage: cron-min start
# Copyright 2014 by Marc Perkel
# docs at http://wiki.junkemailfilter.com/index.php/How_to_run_a_Linux_script_every_few_seconds_under_cron"
# Free to use with attribution
# Run this script under Cron once a minute
basedir=/etc/cron-min
if [ $# -gt 0 ]
then
echo
echo "cron-min by Marc Perkel"
echo
echo "This program is used to run all programs in a directory in parallel every X minutes."
echo
echo "Usage: cron-min"
echo
echo "The scheduling is done by creating directories with the number of minutes as part of the"
echo "directory name. The minutes do not have to evenly divide into 60 or be less than 60."
echo
echo "Examples:"
echo " /etc/cron-min/1 # Executes everything in that directory every 1 minute"
echo " /etc/cron-min/5 # Executes everything in that directory every 5 minutes"
echo " /etc/cron-min/13 # Executes everything in that directory every 13 minutes"
echo " /etc/cron-min/90 # Executes everything in that directory every 90 minutes"
echo
exit
fi
for dir in $basedir/* ; do
minutes=${dir##*/}
if [ $((($(date +%s)/60) % $minutes)) -eq 0 ]
then
for program in $basedir/$minutes/* ; do
if [ -x $program ]
then
$program &> /dev/null &
fi
done
fi
done
dodaje następujące do mojego crontab i pracuje
15 */1 * * * root /usr/bin/some_script.sh >> /tmp/something.log
Czy mógłbyś bardziej wyjaśnić, dlaczego jest to dobre rozwiązanie. –
*/10 * * * * root perl -e 'exit(time()%(90*60)>60)' && command
90 - jest to jeden i pół godziny, w ciągu kilku minut
"> 60" - daję Cron zdolności do opóźniania rozpoczęcia scenariusza w czasie minuty
Również za pomocą tego hacka można ustawić dowolny okres z małą rozdzielczością
Na przykład skrypt uruchamiać co 71 minut
* * * * * root perl -e 'exit(time()%(71*60)>60)' && command
można osiągnąć dowolną częstotliwość jeśli liczyć minuty (, godziny, dni lub tygodni) od Epoch, dodać warunek do górnej części skryptu i ustawić skrypt, aby uruchomić każdą minutę na crontab : prąd
#!/bin/bash
minutesSinceEpoch=$(($(date +'%s/60')))
# every 90 minutes (one and a half hours)
if [[ $(($minutesSinceEpoch % 90)) -ne 0 ]]; then
exit 0
fi
date(1)
powraca 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żesz użyć tego podejścia w przypadku ofert pracy cronowej, dziennej lub miesięcznej:
#!/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 7 hours
if [[ $(($hours % 7)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
Witaj stefanmaric, ponieważ wydajesz się być stanowczym w tej sprawie, proszę dodać odpowiedź tylko do jednego z pytań i oznaczyć te, które są prawdziwymi duplikatami, jako duplikaty najlepszej kombinacji pytanie/odpowiedź. – bummi
Witam @ albummi, faktycznie szukałem funkcji "oznacz jako duplikat". Nie znalazłem tego, więc napisałem. Robiąc więcej badań od czasu Twojego komentarza, dowiedziałem się, że nie mam wystarczającej reputacji, by zgłaszać pytania: http://meta.stackexchange.com/questions/118124/where-on-earth-is-the-mark-duplicate-ui-on -stack-overflow Dzięki za radę i przykro mi z powodu spamu. – stefanmaric
- 1. Cron zadanie uruchamiane co X tygodni iw określone dni
- 2. Jak sprawić, by Ruby uruchamiał jakieś zadanie co 10 minut?
- 3. Opcja wyzwalacza, aby ustawić określone parametry kompilacji?
- 4. Czy mogę skonfigurować HTMLUnit tak, aby uruchamiał tylko określone procesy javascript, a nie całość?
- 5. Cron Job w Laravel
- 6. Jak ustawić Bot Xcode, aby uruchamiał "on commit" dla wszystkich gałęzi zdalnego repozytorium?
- 7. PHPExcel ustawić określone nagłówki formacie
- 8. Jak ustawić program FlashBuilder, aby wyświetlał dane wyjściowe wiersza polecenia?
- 9. Prowadzenie Cron co 30 sekund
- 10. Nie można uruchomić polecenia serwisowego przez cron
- 11. Jak utworzyć zadanie cron, aby uruchomić funkcję SQL PostgreS?
- 12. Jak ustawić cron do uruchamiania mojego skryptu co 40 minut/25 minut?
- 13. Jak wykonać zadanie cron co 72 minut
- 14. Jak wykonać określone polecenia, jeśli plik NIE istnieje?
- 15. Jak sprawić, aby Rebar uruchamiał test wspólny w katalogu wydania?
- 16. Co zrobić, aby program Resharper uruchamiał testy w debugowaniu, gdy otrzymam debugowanie: "Niekonkurencyjny: test nie działa"
- 17. Jak ustawić limit czasu polecenia w SSIS?
- 18. zadanie php cron co 10 minut
- 19. Jak skonfigurować zadanie Cron?
- 20. Jak działa django-cron?
- 21. Cron ekspresja co 50 sekund w Quartz
- 22. Aby sprawdzić, czy ciąg zawiera określone słowo
- 23. Co mogę zrobić, aby Makefile.PL, tak aby po uruchomieniu make test uruchamiał zestaw testów w środowisku tancerza ustawionym na "test"?
- 24. Cron: Ustawienie kilku minut
- 25. Jak sprawić, aby gdb uruchamiał funkcję zdefiniowaną przez użytkownika (zdefiniowaną w .gdbinit) przy każdym uruchomieniu?
- 26. Jak uruchomić crona co 20 minut, ale nie godziny
- 27. Jak sprawić, aby cron działał z określonym modułem silnika aplikacji?
- 28. Co to jest wersja cron dla systemu Windows?
- 29. Cron codziennie o 18.00
- 30. jak skonfigurować określone wykresy w munin, aby aktualizować codziennie zamiast co 5 minut?
Jakie wymaganie? Pierwsze zdanie kwestionuje konieczność 1,5 godziny, drugie dostarcza post na blogu z informacją, jak to zrobić co 1,5 godziny. – vfilby
Wznowiono, ponieważ post na blogu poprawnie odpowiada na pytanie. –
Nie wskazałem tego wyraźnie, gdy głosowałem na nie. Został on zredagowany od tego czasu, aby wyjaśnić, że link jest do potencjalnego rozwiązania na 90 minutowe pytanie. – Alnitak