Cron
Zadania cron są używane do planowania różnych działań na serwerze. Zwykle używane są do cyklicznego uruchamiania skryptów np. codziennie o określonej godzinie. Cron jest unixowym demonem (działa na systemach Linux, FreeBSD, MacOs), służącym do okresowego uruchamiania innych programów.
Demon – w wielozadaniowych (najczęściej uniksopodobnych) systemach operacyjnych proces, który pracuje w tle bez konieczności interakcji z użytkownikiem.
Większość demonów to programy usługowe, które komunikują się za pomocą połączeń sieciowych (co jest zazwyczaj jedyną formą kontroli). Typowy demon po uruchomieniu przekierowuje standardowe strumienie, co czyni go niezależnym od terminala kontrolującego (controlling terminal). Wówczas wszelkie komunikaty informacyjne mogą być zapisywane w osobnych plikach (logach).
źródło Wikipedia
Użytkownicy Windowsa zamiast crona mogą używać Task Schedulera (omówię go na końcu artykułu), który niestety nie ma wszystkich funkcjonalności crona, ale do podstawowych zastosowań w zupełności wystarczy.
Cron szuka tabel crontab, które znajdują się domyślnie w /var/spool/cron/crontabs. Ich nazwy są zgodne z istniejącymi kontami użytkowników. Ładuje również plik konfiguracyjny /etc/crontab, gdzie wpisane są dodatkowe reguły, które uruchamiają zadania cogodzinowe, codzienne, cotygodniowe i comiesięczne. Zadania te wpisywane są w postaci skryptów do katalogów: /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.
Przykład zadania cron
Najprostszy wpis w pliku crontab składa się z określenia czasu wykonywania oraz ścieżki do pliku, który ma być uruchomiony.* * * * * /home/gosia/sites/plikZapis w tablicy crontab może również wyglądać np. tak jak poniższy.
0 0 * * * /usr/bin/php /home/gosia/sites/cron.php > /dev/null 2>&1Zapis ten oznacza, że skrypt cron.php będzie uruchamiany przy użyciu parsera PHP, codziennie o północy. Wyjście skryptu będzie ignorowane, natomiast ewentualne błędy będą wyświetlane na ekranie. Skrypty PHP muszą być uruchamiane za pomocą parsera PHP, zatem przed ścieżką do pliku podajemy również ścieżkę do parsera. Najczęściej ścieżka ma postać /usr/bin/php lub /usr/bin/php-fcgi. W celu znalezienia naszej lokalizacji możemy użyć polecenia: which php.
Określenie czasu
To kiedy skrypt będzie wykonywany określa pięć elementów. Oznaczają one kolejno minuta (0-59), godzina (0-23), dzień miesiąca (1-31), miesiąc (1-12) i dzień tygodnia (0-6, 0 oznacza niedzielę). Zamiast liczby można wpisać też gwiazdkę (*), która reprezentuje wszystkie możliwe liczby na danej pozycji. Poniższy zapis oznacza, że polecenie będzie wykonywane co minutę.* * * * * poleceniePoniżej podaję jeszcze kilka przykładów. Zadanie wykonywane codziennie o północy.
0 0 * * * polecenieZadanie będzie wykonywane co godzinę (zawsze 10 minut po pełnej godzinie, tzn. 00:15, 1:15, 2:15 itd.).
10 * * * * polecenieZadanie będzie wykonywane raz w miesiącu (zawsze pierwszego dnia miesiąca o północy).
0 0 1 * * polecenieMożemy zamiast pojedynczej liczby podać zakres np. 1-10. Poniższy zapis oznacza polecenie wykonywane o godzinie 16:10 od poniedziałku do piątku.
10 16 * * 1-5 polecenieDo określenia czasu na danej pozycji dozwolone jest też podanie kilku liczb lub zakresów oddzielonych przecinkami. Poniższy zapis oznacza, że zadanie będzie wykonywane o północy 1, 5 i 21 dnia każdego miesiąca.
0 0 1,5,21 * * polecenieMożemy też podać okresy czasu. Zapis oznacza */2 - wykonanie co 2 jednostki czasu. Na przykład polecenie poniżej będzie wykonywane co 2 godziny.
0 */2 * * * polecenieJeśli chcemy wykonać jakieś zadanie każdorazowo po uruchomieniu systemu możemy to zrobić za pomocą słowa kluczowego @reboot.
@reboot polecenie
Crontab – zaczynamy
Wszelkie zmiany dotyczące tablic crontabowych wykonujemy poleceniem crontab. W celu wyświetlenia zawartości tablicy dla bieżącego użytkownika wykonujemy polecenie crontab –l. Polecenie crontab –e umożliwia edycję tablicy. Otwiera ją w edytorze tekstowym vi (jest on dość nieporęczny dla osób, które nie miały z nim kontaktu). Aby zacząć pisać w vi wciskamy klawisz i, a następnie wprowadzamy tekst. Na koniec wciskamy Esc, wpisujemy z klawiatury komendę :wq (oznacza zapisz i wyjdź) i wciskamy enter. Zastąpienie crontab zadaniami z pliku odbywa się za pomocą polecenia:crontab zad.txtPolecenie crontab –r usuwa zawartość tabeli crontab. Przeanalizujmy jeszcze poniższy zapis.
10 * * * * /usr/bin/php /home/gosia/sites/cron.php > /dev/null 2>&1Ostatni ciąg po znaku większości oznacza, że przekierowujemy wyjście do /dev/null. W praktyce oznacza to zignorowanie przez system. Ostatnie znaki oznaczają, że wyjście błędów będzie przekierowane do standardowego wyjścia tzn. wyświetlone na ekranie. Można też skierować wyjście do pliku.
10 * * * * /usr/bin/php /home/gosia/sites/cron.php > /log/cron.log