Zadanie Cron, losowy start, ale w określonym czasie
12
Chcę, aby skrypt był uruchamiany raz dziennie, codziennie, zaczynając od 0900 do 1200.
Nie jestem do końca pewien co do składni kreski - czy to oznacza, że skrypt będzie działał KAŻDEJ godziny między 9-12, lub że będzie uruchamiany LOSOWO między 9-12? Ponieważ potrzebuję tego drugiego.
Nigdy nie widziałem implementacji crona, która ma sposób na uruchomienie zadania w przypadkowym czasie. To dziwny wymóg. Jak wynika z dokumentacji, 9-12jest skrótem 9,10,11,12i oznacza co godzinę od 9 do 12.
Jeśli chcesz uruchomić zadanie w przypadkowym czasie, uruchom je na początku przedziału i dodaj losowe opóźnienie. Na przykład, aby uruchomić w losowej godzinie od 9 do 12:
Zauważ, że RANDOMwymaga bash lub ksh, może nie być dostępne w domyślnej powłoce.
Jeśli chcesz uruchomić w losowym czasie od 9 do 12, z drugą rozdzielczością, możesz użyć RANDOM % 10800jako opóźnienia, ale ponieważ RANDOMjest w zakresie 0..32767, wystąpi odchylenie w kierunku opóźnień między 0 a 32768% 10800 = 368. Aby uniknąć tego błędu:
SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
„To dziwny wymóg”. Nie zgadzam się. Wiele aplikacji, zwłaszcza tych, które muszą okresowo logować się na serwerze (np. Menedżerowie pakietów lub klienci zarządzania konfiguracją), muszą wydłużyć czas wykonywania, aby uniknąć sytuacji stada grzmotów . W rzeczywistości wiele takich aplikacji ma wbudowane opcje splay (np. --randomwaitArgumenty do yum lub --splayargumenty do szefa-klienta), ale dla tych, którzy tego nie robią, losowy czas wykonania byłby pomocną funkcją w harmonogramie zadań.
Skończyło się na tym, że mam podobne wymagania dotyczące skryptów Pythona, ale w końcu wdrożyłem to za pomocą samego skryptu, używając funkcji losowego + uśpienia, a następnie uruchamiając zadanie cron @ północ
from time import sleep
import random
sleep_time = random.randint(0,7200) #7200 seconds = 2 hours * 60 min * 60 sec
print(sleep_time)
sleep(sleep_time)
--randomwait
Argumenty do yum lub--splay
argumenty do szefa-klienta), ale dla tych, którzy tego nie robią, losowy czas wykonania byłby pomocną funkcją w harmonogramie zadań.Skończyło się na tym, że mam podobne wymagania dotyczące skryptów Pythona, ale w końcu wdrożyłem to za pomocą samego skryptu, używając funkcji losowego + uśpienia, a następnie uruchamiając zadanie cron @ północ
źródło