Cron

Z MoodleDocs
Wersja z dnia 08:53, 25 maj 2010 autorstwa Leszek Charkiewicz (dyskusja | edycje) (literówka)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Skocz do:nawigacja, szukaj

Niektóre moduły Moodle'a wymagają ciągłego sprawdzania zadanych zapytań. Np, Moodle musi sprawdzać fora dyskusyjne, i wysyłać kopie postów do osób, które subsskrybowały dany temat.

Skrypt za to odpowiedzialny jest ulokowany w folderze administratora i nazywa się cron.php. Nie może się on jednak sam uruchomić. Musisz utworzyć mechanizm, gdzie ten skrypt będzie regularnie uruchamiany (np. co pięć czy dziesięć minut). To zapewnia tzw. "heartbeat" (z ang. rytm bicia serca), więc skrypt może pełnić funkcje w okresach definiowanych przez każdy moduł. Ten rodzaj regularnego mechanizmu jest znany jako "cron service" (z ang. usługa crona).

Skrypt w pliku cron.php przegląda tabelę mdl_modules (przyjmując oczywiście domyślny prefiks tabeli) w bazie danych Moodle'a poszukując modułów, których funkcje crona powinny być uruchomione; zagląda wtedy w każdy taki katalog modułów, znajduje funkcję nazwaną module-nazwa_cron w pliku lib.php i uruchamia ją. Skrypt ten także przegląda tabelę mdl_block poszukując bloków, które powinny być uruchomione przez cron metodą "object functions" (z ang. funkcje obiektowe); wtedy, uruchamia tą metodę dla nowych obiektów powiązaych z tymi blokami (Omijam szczegóły ze względu na zwykłych użytkowników, programistom polecam poczytać admin/cron.php). Te pliki (lib.php i pliki gdzie bloki z klasami są zdefiniowane) mogą zawierać funkcję porządkowania, wysyłania e-maili czy wszystko inne, co powinno być uruchomione regularnie. Np. cron zainicjuje system do stworzenia kopii zapasowej w czasie ustalonym w ustawieniach administratora. Wywoła także każdy moduł odpowiedzialny za komunikowanie czy zawiadomienie z forum przez e-mail, ale nie wszystkie funkcje są wzywane każdorazowo przy uruchamianiu crona. Niektóre z nich są uruchamiane okazjonalnie. Plik cron.php zawiera sekcję, która losowo wywołuje te podstawowe zadania mniej więcej jeden raz na pięć uruchomień crona.

Uwaga, "sprzęt uruchamiający crona nie musi być tym samym sprzętem, gdzie jest uruchomione Moodle". Np. Jeśli masz limit nałożony przez firmę hostingową i nie masz dostępnego crona, możesz wybrać uruchamianie crona na innym serwerze, lub po prostu na komputerze domowych. Jedyne na co musisz zwrócić uwagę, to że plik cron.php powinien być wywoływany regularnie. Skrypt ten nie obciąża znacząco serwera, więc co 5 minut jest zazwyczaj rozsądnym czasem, ale jeżeli uważasz że to za często, możesz zredukować czas do okresów 15-minutowych a nawet 30. Lepiej jednak nie robić tych okresów zbyt długich.

Jak uruchomić Crona?

Po pierwsze przetestuj, czy skrypty działa poprzez uruchomienie go dokładnie z Twojej przeglądarki http://example.com/moodle/admin/cron.php

Jeśli cron jest wywołany z wiersza poleceń przez jakiegoś użytkownika zalogowanego na Twoim Moodle, zostanie utworzone tymczasowe środowisko administratora, które pozwoli mu go uruchomić i wylogować się. Możesz uniemożliwić uruchamianie crona z linii poleceń, przez usunięcie odpowiednich sekcji w pliku cron.php.

Teraz potrzebujesz ustanowić jakąś metodę uruchamiania skryptu automatycznie i regularnie.


System Windows

Są dwa sposoby do uruchomienia cron.php pod Windowsem:

  • Użyć paczki "Moodle Cron package" . Najprostszy sposób to użycie tej małej paczki MoodleCron-Setup.exe, która zrobi te wszystkie rzeczy bardzo prosto przez instalację małego windowsowej usługi. Uruchom ją i nie zapomnij o niej! :)
  • Użyć opcji Zaplanowane Zadania. Jeśli wolisz użyć wbudowanego Windows Scheduler lub masz kłopoty z paczką moodle-cron-for-windows, możesz użyć wget lub php z linii poleceń i zainstalować scheduled task. Musisz wykonać trzy kroki:
    • Wybrać albo php.exe/php-win.exe (w linii poleceń) albo wget
Plik php.exe lub php-win.exe (dla PHP w wersji 5 lub nowszej) jest instalowany w folderze php (np. c:\php) i będzie lepiej wykonywany, kiedy uruchomisz skrypt crona.
jeśli chcesz użyć wget, ściągnij skompilowaną wersję tego programu dla Windowsa, z natywnego portu GNU Win32 (http://unxutils.sourceforge.net/), z Heiko Gerold's wget (http://xoomer.virgilio.it/hherold/) lub z Bart Puype's (http://users.ugent.be/~bpuype/wget/). Jeśli użyjesz paczki Heiko Herold, skopiuj wszystkie pliki *.DLL to katalogu C:\Windows\system32. Skopiuj wget.exe do c:\windows (to sprawi, że wget będzie zawsze w poszukiwanej ścieżce)/
  • Zainstaluj Scheduled Task.
- Kliknij Start >> Panel Sterowania >> Zaplanowane Zadania >> Dodaj zaplanowane zadanie
- Kliknij "Next" aby rozpocząć pracę kreatora.
- Kliknij na "Browse..." i wyszukaj plików C:\php\php.exe lub C:\windows\wget.exe i kliknij "Open"
- Podaj "Type" jako "Moodle Cron" i zaznacz "Daily". Kliknij na "Next"
- Zaznacz "12:00 AM" jako czas startowy, "Every Day" i wybierz aktualną datę jako początkową. Kliknij "Next"
- Wpisz nazwę użytkownika i hasło, pod którym będzie zadanie uruchamiane(to nie musi być całkowicie uprzywilejowane konto). Upewnij się że napisałeś hasło poprawnie i naciśnij "Dalej"
- Zazmacz opcję "Open advanced properties for this task when I click Finish" i naciśnij "Finish"
- W następnym okienku po "Run" umieść
c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php
lub
c:\php\php-win.exe -f c:\moodle\admin\cron.php
. Zastąp "c:\moodle" ścieżką do Twojego folderu zawierającego Moodle, lub "my.moode.site" z nazwą Twojej strony.

- Kliknij na "Schedule" i następnie na "Advanced"
- Zaznacz "Repeat task" oraz ustaw "Every:" na 5 minut a "Until" na "Duration" i 23 godzin i 59 minut
- Kliknij na "OK" i wszystko zrobione.
  • Test dodanego zadania. Możesz przetestować, czy Twoje zadanie zostało uruchomione prawidłowo klikając na nie prawym przyciskiem myszy i wybierając "Uruchom" (Run). Jeśli wszystko zostało prawidłowo wykonane, zobaczysz krótko okienko DOS-u, gdzie wget/php będzie wykonywał i otwierał stronę crona, po czym okienko zniknie. Jeśli odświeżysz folder z zaplanowanymi zadaniami zobaczysz kolumnę "Last Run Time" odzwierciedlającą aktualny czas, oraz kolumnę "Last Result" wyświetlającą "0x0" co oznacza, że wszystko poszło dobrze. Jeśli któraś z tych kolumn ma inne wartości powinieneś ponownie sprawdzić swoje ustawienia.
  • Zapisywanie raportu crona. Możesz rejestrować raporty crona. Jest to dobry sposób aby zobaczyć czy wystąpiły jakieś błędy, kopie zapasowe nie są kompletnie itp. Aby to zrobić musisz dostosować komendy używając php.exe, tak aby wszelkie błędy wypisywane do pliku nazwanego np. c:\moodle\admin\cron.log). Tutaj jest przykład komendy:
    c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log


Na serwerze

Twój panel kontrolny powinien posiadać stronę, która pozwoli Ci zainicjować proces crona.

Jeśli używasz CPanel, zaloguj się a następnie poszukaj nagłówka "Advanced". Kliknij na Cron Jobs . Advanced (unix style). Oto przykładowy tekst który będzie uruchamiał stronę crona co 30 minut.

Email address for output: emailaddress@mydomain.con
Minute:*/30
Hour:*
Day:*
Month:*
Weekday:* 
Command: wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php

Kliknij Commit Changes. Powinno to wyglądać tak:

Plik:Cpanel-cron-setup.JPG


Jeśli używasz innych systemów, poszukaj przycisku "Cron jobs". Tam powinieneś móc umieścić te same polecenia.

Jeśli nie masz wystarczających uprawnień, aby uruchomić polecenie 'wget' na serwerze, możesz użyć komendy php:

/usr/local/bin/php -q /real/path/to/script/admin/cron.php

Na przykład"

/usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php

jeśli nie wiesz jaki jest adres Twojego folderu Moodle, możesz użyć komendy realpath.

Inną alternatywą, w wypadku braku dostępu do komendy 'wget' może być użycie polecenia curl

Na przykład

curl --silent --compressed http://mydomain.com/moodle/admin/cron.php

Używanie linii poleceń pod Uniksem

Są różne programy, które możesz użyć do wywołania strony z linii poleceń. Nie wszystkie z nich muszą być dostępne na danym serwerze.

Na przykład, możęsz użyć polecenia 'wget':

wget -q -O /dev/null http://example.com/moodle/admin/cron.php

Uwaga. W tym przykładzie raport jest wyrzucany (/dev/null)

Wielu użytkowników Moodle'a uważa że 'wget' czasami się sypie. Alternatywna komenda, która rozwiązuje niektóre problemy to:

php http://example.com/moodle/admin/cron.php

to samo przy użyciu lunx:

lynx -dump http://example.com/moodle/admin/cron.php > /dev/null

Uwaga. W tym przykładzie raport jest wyrzucany (/dev/null)

Alternatywnie możesz użyć standardowej wersji PHP, skompilowanej tak, aby można było ją uruchamiać z linii poleceń. Zaletą tej metody jest to, że rejestr nie jest wypełniany stałymi zapytaniami do pliku cron.php. wadą jest potrzeba dostępu do wersji php z linią komend.

/opt/bin/php /web/moodle/admin/cron.php

Używanie programu crontab pod Uniksem

Wszystko co potrafi Cpanel możemy także zrobić pod Uniksem za pomocą narzędzia zwanego crontab. Jeśli masz linię poleceń możesz zainicjować crontab'a używając polecenia:

crontab -e

i dodając jedną z podanych wyżej komend, np:

*/30 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php

Pierwsze pięć wartości to czas uruchomienia. gwiazdka jest równoznaczna ze słowem zawsze czy każdy. Powyższy przykład oznacza uruchomienie komendy wget -q -O /dev/null... every 30 minutes (*/30), every hour (*), every day of the month (*), every month (*), every day of the week (*).

Symbol "O" (duża litera, nie zero) wskazuje na docelowy plik zapisu logów, w tym wypadku jest to "dev/null", czyli zostaną usunięte. Jeśli tylko chcesz zobaczyć rejestr Twojego pliku cron.php wpisz w przeglądarkę takie adresy:


Dla początkujących, "EDITOR=nano crontab -e" pozwoli Ci edytować plik crontab za pomocą edytora nano. nano. Ubuntu domyślnie używa tego edytora.

Zazwyczaj komenda "crontab -e" przeniesie Cię do edytora tekstowego 'vi'. Wciśnij wtedy "i" a później wpisz komendę powyżej i naciśnij ESC. Zapisz i wyjdź wpisując " :wq" , wyjdź bez zapisu ":q!". Edytor 'vi' jest dostępny tutaj: intro.


Zobacz także

nl:Cron sk:Cron