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.


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.


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