iMagazine

Jak korzystać z cron’a – monitorowanie zewnętrznego IP

07/03/2013, 14:49 · · · 4

Cron to proces w systemach unixowych, który ma za zadanie wywoływać w tle określone skrypty co jakiś ustalony interwał czasowy. Żeby nie pisać tu samej tylko teorii, rozważymy przykład jego zastosowania poprzez monitorowanie zmian zewnętrznego adresu IP.

We wstępie pokrótce wyjaśniliśmy sobie, czym jest cron. Ale w jaki sposób go skonfigurować? Do tego służy polecenie crontab, gdzie wpisujemy kolejne zadania do wykonania. Wszystko wpisujemy według poniższego schematu:

Pierwszych pięć gwiazdek wskazuje po kolei na interwał czasowy, w jakim zadanie ma być wykonanie. Patrząc na nie od lewej ustawiamy więc:

  • minuty (wartości od 0 do 59)
  • godziny (0 do 23)
  • dni miesiąca (1 do 31)
  • miesiące (1 do 12)
  • dzień tygodnia (0 do 6, gdzie 0 to niedziela)

Jak to prawidłowo odczytywać? Wystarczy zapamiętać słowo “każdy”. Na przykład:

oznaczać będzie, że dany skrypt zostanie wywołany w 2 minucie każdej godziny, każdego dnia miesiąca, każdego miesiąca i każdego dnia tygodnia, ponieważ pozostawienie gwiazdek wywołuje zadanie co minutę, co godzinę, itd.

Załóżmy, że chcemy uruchomić zadanie każdego 1-ego dnia miesiąca dokładnie o 12 w południe. Nasz zapis wyglądać będzie następująco:

Studiując powyższy zapis, tłumaczymy go następująco:

  • minut: 0
  • o godzinie: 12
  • dnia miesiąca: 1
  • miesiąca: * (czyli każdego)
  • dnia tygodnia: * (czyli również każdego)

crontab pozwala również na określanie przedziału czasowego. Załóżmy, że chcemy wykonać coś raz dziennie, ale tylko od poniedziałku do piątku. Zapiszemy to wtedy następująco:

Wyjaśnienie “zegara” jest następujące:

  • minut: 0
  • o godzinie: 10
  • dnia miesiąca: * (każdego)
  • miesiąca: * (każdego)
  • dnia tygodnia: 1-5 (czyli od poniedziałku do piątku)

W przypadku, gdy chcielibyśmy zlecić zadanie do wykonania co ileś minut (np. co 15) standardowy zapis wygląda następująco:

Należy zwrócić uwagę, że wartości liczbowe nie są oddzielane spacją. Ponieważ częstotliwość jest regularna, to samo zadanie można zapisać również tak:

Skoro trochę teorii już znamy, przejdźmy w końcu do naszego przykładu, czyli monitorowaniu zewnętrznego adresu IP. Oczywiście, jeśli ktoś posiada taki wykupiony adres, to nie powinien się on zmieniać, ale są przypadki, kiedy dostawca sam z siebie nam go zmieni (sam się z tym spotkałem kilka razy). Jako, że cron odczytuje skrypty, trzeba znaleźć sposób, by zczytać jakoś zewnętrzny adres IP. Na szczęście wystarczy chwilkę “wyguglować” i rozwiązanie znajduje się szybko. Może bez wnikania w szczegóły wyszukiwania, polecenie, które służy do “pobrania” naszego zewnętrznego IP uzyskamy na przykład wpisując w Terminalu:

Teraz przydałoby się “ubrać” powyższe polecenie w plik ze skryptem. W tym celu otwieramy dowolny edytor tekstowy (może być TextEdit lub TextWrangler) i wpisujemy do niego:

Taki plik zapisujemy pod stosowną nazwą, np. ip.sh w wybranym przez nas miejscu, np w folderze Documents.

Teraz wreszcie przejdźmy do edycji crontab. W tym celu w Terminalu wpisujemy:

Zostanie uruchomiony edytor tekstowy vi. Wciskamy dowolną literę, a na dole okna Terminalu powinien pojawić się zapisek - INSERT-, co oznacza, że możemy zacząć pisać. Aby więc sprawdzać nasz adres IP co 5 minut wpisujemy:

crontab zapisujemy wciskając najpierw klawisz ESC, a potem wpisując :wq i zatwierdzając Enterem. Domyślnie crontab wysyła wyniki zadań do terminalowego maila. Jako że korzystanie z niego nie jest szybkie, to “przekierujemy” sobie te wyniki do pliku tekstowego. Załóżmy, że wynik ma być zapisywany w pliku o nazwie ip.txt w naszym folderze Dropboksa (będzie to dobre miejsce do zapisu, bo do Dropboksa mamy dostęp z dowolnego miejsca mającego łączność z internetem). W takim wypadku przechodzimy znowu do edycji listy zadań (crontab -e), wciskamy dowolny klawisz w edytorze tekstowym, żeby przejść w tryb edycji, kursorem przechodzimy na koniec i dopisujemy:

Potem wciskamy znów ESC, wpisujemy :wq i wciskamy klawisz Enter.

Całe utworzone zadanie powinno wyglądać więc tak:

Czym są owe >>? Wskazują, że kolejne wyniki mają być dopisywane do pliku ip.txt. Jeśli chcielibyśmy natomiast trzymać tylko jeden, najświeższy wynik, to zastępujemy znaki >> jednym >.

I na koniec jeszcze ostatnia komenda, pozwalająca na podejrzenie ustawionych zadań w crontab:

Źródło: Kevin van Zonneveld


Maciej Skrzypczak

Użytkownik sprzętu z nadgryzionym jabłkiem, grafik komputerowy, nałogowy gracz ARK: Survival Evolved. Redaktor iMagazine.pl.


Dodaj komentarz

Łukasz Sibul napisał(a):

Błąd w zapisie: „oznaczać będzie, że dany skrypt zostanie wywołany co każdą 2 minutę po każdejpełnej godzinie, każdego dnia miesiąca, każdego miesiąca i każdego dnia tygodnia, ponieważ pozostawienie gwiazdek wywołuje zadanie co minutę, co godzinę, itd.” Skrypt nie będzie uruchamiany co każdą 2 minutę, lecz po prostu w drugiej minucie każej godziny. Co każdą 2 minutę byłoby gdyby był zapis */2 a samo 2 oznacza dokładną minutę i tylko w tej minucie godziny będzie się uruchamiał.

Maciej Skrzypczak napisał(a):

Ale napisałem „co każdą 2 minutę po (…) pełnej godzinie”, czyli się zgadza.

Łukasz Sibul napisał(a):

No nie do końca „co każdą 2 minutę po każdej pełnej godzinie” nie jest to logiczne. Oznacza to, że co każdą godzinę, skrypt zostanie uruchomiony w 2,4,6,8,10.. itd minucie. A on zostanie uruchomiony tylko 1 raz, dokładnie w 2 minucie każdej godziny.

Maciej Skrzypczak napisał(a):

Ok, przekonałeś mnie. ;)

Dbamy o Twoją prywatność

Od dnia 25 maja 2018 r. dostosowujemy naszą działalność do nowego Rozporządzenia Unii Europejskiej o Ochronie Danych Osobowych (RODO).

Zaktualizowaliśmy naszą Politykę Prywatności, aby udzielić Ci bardziej szczegółowych informacji, w jaki sposób iMagazine.pl chroni twoją prywatność, oraz w jaki sposób możesz korzystać ze swoich praw odnośnie danych osobowych.

Kliknij w poniższy link, aby zapoznać się z zaktualizowaną Polityką Prywatności.

Dziękujemy, że jesteś z nami,
redakcja iMagazine

DOWIEDZ SIĘ WIĘCEJ OK