Jeśli chcesz uruchamiać crona co n
minuty, istnieje kilka możliwych opcji w zależności od wartości n
.
n
dzieli 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
Tutaj rozwiązanie jest proste dzięki zastosowaniu /
notacji:
m-59/n * * * * command
W powyższym n
oznacza wartość n
i m
przedstawia wartość mniejszą niż n
lub *
. Spowoduje to wykonanie polecenia w minutachm,m+n,m+2n,...
n
NIE dzieli 60
Jeśli n
nie dzieli 60, nie można tego zrobić czysto za pomocą crona, ale jest to możliwe. Aby to zrobić, musisz umieścić test w cronie, w którym test sprawdza czas. Najlepiej jest to zrobić patrząc na znacznik czasu UNIX, czyli całkowitą liczbę sekund, które upłynęły od tego czasu 1970-01-01 00:00:00 UTC
. Powiedzmy, że chcemy rozpocząć uruchamianie polecenia za pierwszym razem, gdy Marty McFly przybył do Riverdale, a następnie powtarzać je co n
minuty później.
% date -d '2015-10-21 07:28:00' +%s
1445412480
Aby cronjob działał co 42
nd minutę po `2015-10-21 07:28:00 ', plik crontab wyglądałby następująco:
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
ze minutetestcmd
zdefiniowanym jako
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
now=$(date "+%s")
minutes=$(( (now - starttime) / 60 ))
modulo=$2
(( now >= starttime )) && (( minutes % modulo == 0 ))
Uwaga: na czas UNIX nie mają wpływu sekundy przestępne
Uwaga: cron
nie ma dokładności poniżej sekundy