Zadania cykliczne cron
Zadania cykliczne cron
Cron to mechanizm pozwalający na automatyczne uruchamianie programów cyklicznie lub o określonej porze.
Program ten umożliwia operacja takie jak synchronizacja stanów magazynowe z bazą danych sklepu internetowego lub pobranie aktualnego kursy walut.
Skrypty PHP mogą być wywoływane w dwóch trybach CLI oraz CGI. Skrypty CLI to inaczej programy wywoływane z linii poleceń. CGI to skrypty wywoływane w środowisku przeglądarki www. W większości przypadków zadziałają oba wywołania, ale czasami skrypt musi być wywołany w konkretnym trybie. W takiej sytuacji w sekcji nazwa programu należy podać jedną z poniższych ścieżek. To klient powinien wiedzieć w jakim trybie ma być wywoływany skrypt PHP. Jeżeli nie wie to powinien to ustalić u twórcy oprogramowania.
CLI
/usr/local/php5.2/bin/php /usr/local/php5.3/bin/php /usr/local/php5.4/bin/php /usr/local/php5.5/bin/php /usr/local/php5.6/bin/php /usr/local/php7.0/bin/php
CGI
/usr/local/php5.2/bin/php-cgi /usr/local/php5.3/bin/php-cgi /usr/local/php5.4/bin/php-cgi /usr/local/php5.5/bin/php-cgi /usr/local/php5.6/bin/php-cgi /usr/local/php7.0/bin/php-cgi
Skrypty PHP wywoływane przez crona korzystają z domyślnego php.ini na serwerze. Aby wykorzystany został własny plik php.ini (np. z włączonym IonCubem) musi zostać on podany w argumentach. Służy do tego parametr -c:
-c /katalog/katalog/php.ini
Aby utworzyć nowe zadanie cron należy zalogować się do Panelu klienta za pomocą konta administracyjnego.
1. W kolejnym kroku klikamy na zakładkę serwer www i wybieramy polecenie „Zadania cron”.
2. W otwartym formularzu wybieramy przycisk „Dodaj zadanie”.
3. Wprowadzamy niezbędne dane.
Określamy harmonogram, wg którego będzie uruchamiany skrypt.
Znak „*” oznacza wszystkie dostępne wartości dla zmiennej czasowej,
1,5,6 – oddzielone przecinkami – wybór pojedynczych wartości ze zbioru dostępnego (np. godzina 12).
Aby ustawić zadanie co określoną wartość należy podać */wartość.
Przykłady:
„Uruchamiaj codziennie co 15 minut” – w każdym kryterium z wyjątkiem minut wpisujemy znak * (godziny, dni, miesiące …). Dla minut ustalamy parametr */15.
„Uruchamiaj raz na dobę, 5 minut po północy” – na liście ‘minuta’ wpisujemy 5, na liście ‘godzina’ wpisujemy 0, dla pozostałych wartości wpisujemy znak *.
W polu „polecenie” wpisujemy pełną ścieżkę do pliku:
/usr/bin/php70 /sciezka/do/plik.php
Alternatywą dla ścieżki może być adres URL do skryptu.
Zaznaczamy checkbox „URL” i wybieramy protokół przesyłania dokumentów hipertekstowych (http:// lub https://)
Na liście „host” wybieramy właściwy URL, a w polu „polecenie” podajemy /usr/bin/curl.
Adres URL może zawierać parametry podobnie jak ma to miejsce w klasycznej przeglądarce internetowej, tak więc dozwolne są również adresy typu
www.przykladowastrona.com/cron/plik.php
Jeśli chcemy wywołać skrypt po adresie www, nie zaznaczamy checkboxa „URL”
lecz wpisujemy odpowiednie ustawienie w zakładce „polecenie”
np.
/bin/sh -c '/usr/bin/curl --silent http://przykladowastrona.com/cron/plik.php &>/dev/null'
Domyślną lokalizacją zapisu wyniku zadania cron, jest następująca ścieżka:
/tmp/sh.out
Jeżeli wynik, crona ma być zapisywany do innej lokalizacji, można określić do niej ścieżkę
wpisując ją w polu: Log stdout
Błędy lub komunikaty zwrócone przez skrypt dotyczące danego zadania można znaleźć w folderze tmp na przestrzeni na której zostało dodane zadanie cron. Pliki mają nazwę taką jak wywoływany program i rozszerzenia err lub out.
Aby uruchamiać cronem skrypt napisany przez siebie (np skrypt powłoki sh, lub perl), należy pamiętać o nadaniu mu prawa do wykonywania (minimum 744).
Znane problemy
Kod uruchamiany przez stronę www działa, ale nie działa wywołanie przez crona – zwracane są komunikaty o nieistniejących plikach i/lub błędnych ścieżkach:
Przyczyną jest stosowanie względnych ścieżek do plików w uruchamianym kodzie bez jednoczesnej weryfikacji lokalizacji względem uruchamianego kodu. W przypadku wywołań stron, katalog z którego uruchamiany jest kod jest tym, w którym się on znajduje, a w przypadku zadania cron, jest nim zawsze główny katalog serwera. Rozwiązaniem jest rezygnacja z względnych ścieżek w kodzie lub inteligentna kontrola tych ścieżek na podstawie lokalizacji uruchamianego pliku.