Powiedzmy, że mam kilka skryptów cron, które muszą być uruchamiane co 15 minut. Mógłbym ustawić je tak, aby działały: */15 * * * *
ale potem wszystkie działają jednocześnie. Wydaje się głupie, że serwer pozostaje bezczynny przez kilka minut, a następnie nagle próbuje wykonać kilkanaście skryptów jednocześnie.
Czy istnieje sposób na uruchomienie jednego skryptu w minucie 1, 16, 31, 46, a drugi w 2, 17, 32, 47?
Innymi słowy, chcę, aby każdy skrypt był uruchamiany co 15 minut, ale nie dbam o to, aby działały one dokładnie w kwadrans.
run-parts
jest również obecny w systemach Fedora / Red Hat.Najprostszym sposobem na to jest po prostu ręczne skonfigurowanie poleceń, aby były uruchamiane, gdy chcesz:
Lub możesz napisać skrypt, aby automatycznie wygenerować odpowiednie wpisy crontab (które unikają literówek).
Niektóre wersje crona (prawdopodobnie w tym ta, której używasz) akceptują rozszerzoną składnię:
źródło
Cron nie jest naprawdę dobry w tym, co próbujesz zrobić. Czy rozważałeś napisanie skryptu, który działa jak demon, który w zasadzie śpi 15 minut, wykonuje polecenie, a następnie wykonuje pętle?
źródło
sleep 300
między każdym wykonaniem polecenia, jego wykonanie spowoduje przesunięcie czasu; może działać co 15:10, a nie co 15:00. A jeśli proces w tle umrze lub system uruchomi się ponownie, w przeciwieństwie docrond
tego, nie uruchomi się automatycznie. Istnieją sposoby na „demonizowanie” procesu w tle, ale wtedy jest to prawie ponowna implementacjacrond
.run-parts
dostarczany z większością instalacji crona, aby to zrobić. Zobacz odpowiedź @ AndrewSchulman.Wiele dystrybucji ma /etc/cron.d/cronhourly, dla których wszystkie skrypty uruchamiane są co godzinę. Możesz nawet określić kolejność, zaczynając od kolejnych numerów, na przykład 01scriptA 02scriptB - powinno to być trywialne ze znajomością crona, którą już masz do wyprodukowania „cronhourlybyfour”, jak to nazywamy w dystrybucji Linuksa Smoothwall :)
Słowo ostrzeżenia: używa części run, jak wcześniej sugerowano, a części run NIE podoba się skryptom z. w nazwie, więc nie nazywaj go „deletehomefolders.sh” nazwij to „01deletehomefolders” i upewnij się, że zaczynasz od właściwego #! wiersz na cokolwiek, co zamierzasz interpretować swój skrypt.
źródło