Image for CRON – jak uruchamiać zadania co 1 sekundę?

CRON – jak uruchamiać zadania co 1 sekundę?

Czas czytania:

Jeżeli chcemy uruchamiać skrypty na serwerze o określonych porach dnia, tygodnia czy miesiąca  to najlepszym i prostym rozwiązaniem jest Cron. Przydaje się on zarówno do działań administracyjnych (backupy, czyszczenie danych, analiza) jak również może być wykorzystywany do dowolnej aplikacji w celu asynchronicznego uruchamiania dowolnych części/modułów systemu. Utworzenie zadania jest bardzo proste. Wpisując polecenie „crontab -e” dostajemy możliwość dopisania nowego zadania do harmonogramu. Każda linia zawiera osobne zadanie. Poniższy schemat przedstawia skrypt o nazwie „sample” który jest uruchamiany codziennie o godzinie 15:12

12 15 * * * /path/to/smple

Poszczególne kolumny oznaczają:

  • minuta od 0 do 59
  • godzina od 0 do 23
  • dzień od 1 do 31
  • miesiąc od 1 do 12
  • dzień tygodnia (0-niedziela, 1-poniedziałek,….)
  • polecenie

Jak więc ustawić polecenie które będzie się wykonywało co 5 minut?

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script

Można jednak ułatwić sobie zadanie i skorzystać ze skróconej notacji

*/5 * * * * /path/to/script

Problem zaczyna się w momencie gdy chcemy uruchamiać skrypt w odstępie mniejszym niż minuta. Cron nie nadaje się za bardzo do tego. Jak więc to zrobić? Sposobów jest kilka, najprostszy i najbanalniejszy to przygotowanie skryptu który będzie chodził w tle cały czas. Należy jednak przy tym pamiętać o zabezpieczeniu aby po awarii (restart serwera, zabicie skryptu) uruchomił się od nowa. Na początek należy utworzyć skrypt który będzie nam monitorował procesy np. agent.sh o poniższej zawartości:

#!/bin/bash  if [ $(/bin/pidof -x agent.sh| /usr/bin/wc -w) -gt 2 ] ; then      exit 0  else      while true; do      /paht/to/scirpt          sleep 1      done  fi

A następnie dokładamy do crona uruchamianie go co 1 minutę:

*/1 * * * * /path/to/agent.sh

Dzięki takiemu rozwiązaniu jesteśmy pewni że skrypt będzie się wykonywał co sekundę oraz że w przypadku gdy nastąpi jego zatrzymanie to po minucie znowu zostanie praca wznowiona. Mamy też zabezpieczenie przed uruchomieniem wielu instancji skryptu w tym samym czasie. Nie jest to idealne rozwiązanie ale jeśli szukasz najprostszego – to ten podany wyżej na pewno w wielu przypadkach okaże się  pomocny.

Zainteresował Cię ten artykuł?

Oferujemy profesjonalne wsparcie programistów w technologii Web.
Może Cię również zainteresować:
Clutch Recognizes GOGOmedia as a 2022 Development Leader in Poland

GOGOmedia is a multidisciplinary team with vast experience in the digital technology space. We deliver… Read More

Zatrzymać użytkownika na stronie — 4 praktyczne sposoby

Tworząc stronę, zadaliście się sobie mnóstwo trudu. Macie dobre teksty, poprawne UX i atrakcyjny design,… Read More