CRON – jak uruchamiać zadania co 1 sekundę?

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.

Może Cie również zainteresować:

Cookies

Nasza strona internetowa używa plików cookies (tzw. ciasteczka) w celach statystycznych, reklamowych oraz funkcjonalnych. Każdy może zaakceptować pliki cookies albo ma możliwość wyłączenia ich w przeglądarce, dzięki czemu nie będą zbierane żadne informacje. Czytaj więcej