Tak, tak, chodzi o to ponad rok, ale może uda mi się dodać coś pożytecznego:
Jak cron coś w losowym przesunięciem 20 razy dziennie pomiędzy 9am i 11pm? To trochę trudne w cronie, ponieważ dzielisz 14 godzin przez 20 czasów wykonania. Nie podobają mi się inne odpowiedzi, ponieważ wymagają napisania skryptu otoki bash dla skryptu php.
Jednakże, jeśli będziesz pozwalają mi wolność, aby złagodzić częstotliwości taktowania i ograniczenie do 13 razy między 8:30 a 11:09 po południu, to może załatwić sprawę, a wszystko w ramach crontab:
30 8-21/* * * * sleep ${RANDOM:0:2}m ; /path/to/script.php
$ {RANDOM: 3: 2} wykorzystuje $ RANDOM basha, o którym wspomnieli inni, ale dodaje cięcie tablicy bash. Ponieważ zmienne bash są nieopisane, pseudolosowy podpisany 16-bitowy numer zostaje obcięty do pierwszych 2 z 5 cyfr dziesiętnych, dając ci zwięzły wykładnik liniowy opóźniający cronjob od 10 do 99 minut (chociaż rozkład jest skierowany w stronę 10 do 32).
Następujące mogą również działać dla ciebie, ale okazało się, że z jakiegoś powodu są "mniej losowe" (być może prawo Benforda jest wyzwalane przez modulowanie liczb pseudolosowych .. Hej, nie wiem, policzyłem matematykę. .. Winić go na bash):
30 8-21/* * * * sleep $[RANDOM\%90]m ; /path/to/script.php
trzeba uczynić moduł jako „\%” powyżej, ponieważ cron (no, przynajmniej Linuksowy vixie-cron ') kończy wiersz po napotkaniu Niecytowany' % ".
Może uda ci się zdobyć 7 pozostałych skryptów, dodając kolejną linię z innym 7-godzinnym zakresem. Możesz też złagodzić swoje ograniczenia, aby biegać między godziną 3 a 23.
Pytanie nie jest zbyt dobrze postawione. Ostatecznie chcesz rozdać 20 punktów na osi czasu między godziną 9 a 11 rano. Ale czy istnieją ograniczenia dotyczące minimalnej różnicy czasu? Czy nic nie jest do zaakceptowania w godzinach od 9:00 do 10:30? Jedynym sposobem, aby to zrobić, wydaje się być możliwy pomysł Klausa: wybierz 20 razy o 09:00, co pozwoli ci spełnić wszelkie ograniczenia, a następnie zaplanuj rzeczy z "na". –