Współczesne aplikacje webowe bardzo często wykonują zadania zgodnie z pewnym harmonogramem. Wśród zaplanowanych działań może znaleźć się czyszczenie pamięci cache, codzienne sprawdzenie okresów subskrypcji użytkowników czy też regularne wykonywanie raportów. Niniejszy poradnik przedstawia sposób w jaki można precyzyjnie określić czas wykonania naszego skryptu php na serwerze na platformie Linux'owej.
W systemach z rodziny Linux rolę harmonogramu zadań pełni proces "cron". Na podstawie danych zdefiniowanych w tablicy zadań ("crontab") uruchamia on inne procesy w ściśle określonym czasie. Chcąc wykorzystać cron dla naszych potrzeb musimy zwrócić uwagę na fakt, iż proces ten jest w stanie uruchamiać wyłącznie inne procesy "systemowe". Możliwe jest zatem zaprogramowanie cron'a w ten sposób, aby np. co godzinę kasował pliki tymczasowe z podanego katalogu lub uruchamiał dowolny skrypt powłoki bash.
Uruchomienia skryptu php w powłoce systemowej jest możliwe przy użyciu komendy 'php'. Przed zdefiniowaniem naszego harmonogramu prac konieczne jest poznanie ścieżki dostępu do binarnego pliku tej komendy. Przy założeniu że znajduje się on w katalogu /usr/bin , a skrypt php jaki chcemy wykonać w /home/uzytkownik/skrypty uruchomienie kodu php w powłoce wymagałoby następującej komendy:
Skrypt php można wykonać w nieco inny sposób. Jeśli na początku pliku php załączymy linię "#!/usr/bin/php -q -c /etc/php5/apache2/php.ini" oraz przydzielimy naszemu skryptowi prawo do wykonania, powłoka systemowa uruchomi proces php automatycznie po wpisaniu poniższej komendy z uwzględnieniem naszego pliku php.ini:
Aby zmusić cron do wykonania powyższego polecenia, wystarczy wyedytować wpisy crontab. Służy do tego polecenie 'crontab -e [nazwa_uzytkownika]', które powoduje uruchomienie prostego, 'konsolowego' edytora tekstu. Definiowanie zaplanowanych zadań sprowadza się do wprowadzenia prostych wpisów. Oto przykład:
Pierwsza sekcja wpisu (' 0 0 * * * ') określa czas uruchomienia procesu. Znajduje się tam pięć pól reprezentujących odpowiednio minuty, godziny, dni miesiąca, miesiąc oraz dni tygodnia. Możliwe jest wprowadzenie wartości numerycznej (gdzie '0' oznacza początek danego okresu) lub gwiazdki oznaczającej każdą minutę, godzinę itd. Cron dopuszcza też wpisanie zakresu liczb, (np. 1-5) listy wartości (np. 2,4,6) lub ich łączne użycie (np 1-5,7). W podanym przykładzie skrypt jest uruchamiany w każdej zerowej minucie, zerowej godziny, każdego dnia miesiąca, każdego miesiąca, w każdym dniu tygodnia - innymi słowy codziennie o północy.
Po dokonaniu odpowiedniego wpisu po prostu zapisz zmiany i zakończ działanie edytora, a proces cron automatycznie uwzględni Twoje zmiany w planowaniu zadań. Jeśli podczas uruchamiania komendy 'crontab -e' podałeś swój adres email a uruchamiane skrypty generują pewne dane na wyjściu otrzymasz wiadomość z odpowiednimi komunikatami.
Dzięki @legorek już dopisuję
Warto dodać, że przy takim wywołaniu skryptu, najprawdopodobniej nie zostanie załadowany plik php.ini. Żeby sobie z tym poradzić, wystarczy dodać parametr -c. Czyli np. #!/usr/bin/php -q -c /etc/php5/apache2/php.ini