Cron
Z MoodleDocs
Nektoré moduly v Moodle vyžadujú priebežnú kontrolu plnenia svojich úloh. Systém napríklad potrebuje skontrolovať diskusné fóra a odoslať novo vložené príspevky emailom tým používateľom, ktorí si zriadili ich odoberanie.
Skript, ktorý má toto na starosti, je umiestnený v adresári admin a volá sa cron.php. Tento skript sa však nevie spúšťať sám, preto je potrebné nastaviť mechanizmus jeho pravidelného volania (napríklad každých päť minút). Tým systém získa niečo ako "srdcový rytmus" a skript môže volať ďalšie funkcie v periódach definovaných jednotlivými modulmi.
Skript cron.php prechádza všetky podadresáre modulov a hľadá, či v súbore lib.php existuje funkcia meno-modulu_cron. Ak áno, spustí ju. Tieto funkcie vykonávajú činnosti na odosielanie pošty, čistenie databázy a iné, ktoré sú potrebné vykonávať pravidelne. Napríklad zálohu kurzov v časoch, ktoré špecifikoval administrátor. Avšak, nie všetky funkcie sú vykonané každý raz, niektoré sa spúšťajú náhodne každý piaty raz.
Všimnite si, že stroj volajúci cron.php nemusí byť ten istý, ako ten, na ktorom vám beží Moodle. Ak je vám teda poskytovaná webová schránka bez možnosti nastavení služby cron, môžete pravidelné volanie vášho skriptu zriadiť na akomkoľvek inom serveri či dokonca domácom počítači.
Zaťaženie spôsobované týmto skriptom nie je veľké a časový interval 5 minút je obvykle dostatočný. Ak by ste predsa len chceli znížiť zaťaženie serveru, nastavte hodnoty medzi 15 a 30 minútami. Nedoporučuje sa nastaviť väčší časový odstup, oneskorenie emailov môže napríklad spomaliť celý beh
Najprv si vyskúšajte, či vám funguje ručné volanie pomocou vášho prehliadača: http://example.com/moodle/admin/cron.php
Ak je cron spúšťaný z príkazového riadku ľubovoľným používateľom, Moodle vytvorí dočasné administrátorské konto a prostredie, v ktorom je skript vykonávaný. Toto sa dá zakázať v príslušnej časti súboru cron.php.
Teraz potrebujete zariadiť, aby sa tento skript nejakým spôsobom volal automaticky a pravidelne.
Obsah |
Na Windows
Existujú dva spôsoby nastaviť cron v MS Windows:
- Použite balík Moodle Cron package. Najľahšou cestou je použiť balík MoodleCron-Setup.exe, ktorý rieši celú vec veľmi jednoducho vytvorením služby pre Windows. Spusťte tento program a zabudnite naň :-).
- Použite Plánovač úloh. Druhou možnosťou je použitie plánovača úloh priamo pod Windows. Môže byť použitý aj vtedy, keď sa nepodarí nastaviť predošlý spôsob. Postup je nasledovný:
- Vyberte si, či použijete alebo the php.exe/php-win.exe (php z príkazového riadku) alebo wget
- Súbor php.exe alebor php-win.exe (pre PHP 5) sa nachádza v adresári, kde je nainštalované php.
- Program wget je potrebné získať z GNU Win32 (http://unxutils.sourceforge.net/), alebo zo stránky http://xoomer.virgilio.it/hherold/, alebo http://users.ugent.be/~bpuype/wget/. V druhom prípade skopírujte dll súbory do C:\Windows\system32 a wget.exe do c:\windows (alebo inde, kde bude v ceste).
- Nastavte plánovač úloh.
- - Choďte na Start >> Control Panel >> Scheduled Tasks >> Add Scheduled Task.
- - Stlačte "Next" na spustenie sprievodcu.
- - Kliknite na tlačidlo "Browse..." a nájdite c:\php\php.exe alebo c:\windows\wget.exe. Potom kliknite na "Open".
- - Napíšte "Moodle Cron" ako meno úlohy a vyberte "Daily" v plánovači. Kliknite "Next".
- - Zvoľte "12:00 AM" ako počiatočný čas, nastavte "Every Day" a zvoľte dnešný deň ako počiatočný deň. Kliknite "Next".
- - Zadajte meno a heslo používateľa, ktorý bude spúšťať úlohu. Nemusí to byť administrátor. Skontrolujte správnosť týchto údajov. Kliknite "Next".
- - Začiarknite checkbox s názvom "Open advanced properties for this task when I click Finish" a kliknite "Finish".
- - V novom dialógovom okne zapíšte nasledovné v políčku Run:
c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php
aleboc:\php\php-win.exe -f c:\moodle\admin\cron.php
Nahraďte "c:\moodle" s cestou k Vašej inštalácii Moodle.
- - Kliknite na kartu "Schedule" a tlačidlo "Advanced...".
- - Vyznačte "Repeat task", nastavte "Every:" na 5 minút a "Until:" na "Duration" pričom napíšte "23" hodín a "59" minút.
- - Kliknite "OK" a je to.
- Otestujte naplánovanú úlohu tak, že kliknete na ňu pravým tlačidlom myši a zvolíte "Run". Ak je všetko správne nastavené, uvidíte krátko okno DOSu, kým wget/php vykonáva zvolený príkaz. Potom v zozname posledne spustených úloh uvidíte v podrobnom zobrazení, že úloha bola spustená v aktuálnom čase a že jej výsledok je "0x0" (všetko v poriadku). Ak tak nie je, mali by ste opäť skontrolovať nastavenie.
- Logovanie výstupu z cronu. Skontrolujte výpis z logov, ak niečo nefunguje. Docielite to tak, že zmeníte vykonávaný príkaz a presmerujete jeho výstup do súboru napríklad takto:
c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log
Na serveroch poskytovateľov webových služieb
Váš ovládací panel na serveri môže obsahovať stránku, ktorá umožní nastavenie cronu. Napr. na systéme Cpanel hľadajte tlačidlo "Cron jobs" na stránke "Advanced". Vložte nasledovné pre spúšťanie cronu každých 30 minút.
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
Pre ostatné systémy hľadajte tlačidlo Cron a použite v ňom Unixové
príkazy, ktoré sú nižšie.
Ak nemáte povolenie na spustenie programu 'wget', skúste to s php:
/usr/local/bin/php -q /real/path/to/script/admin/cron.php
Napríklad:
/usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php
Spustenie skriptu z príkazového riadku
Existujú rôzne spôsoby, ako zavolať stránku z príkazového riadku. Môžete napríklad použiť unixový program 'wget':
wget -q -O /dev/null http://example.com/moodle/admin/cron.php
Všimnite si, že v tomto príklade je výstup stránky zahodený (resp. presmerovaný na /dev/null).
Ak by program wget nefungoval (najmä pri mailoch), skúste alternatívne php:
php http://example.com/moodle/admin/cron.php
Alebo lynx:
lynx -dump http://example.com/moodle/admin/cron.php > /dev/null
Prípadne môžete použiť nezávislú verziu PHP skompilovanú tak, aby sa spúšťal na príkazovom riadku. Výhodou tohoto spôsobu je, že protokol vášho webového serveru nie je zaplňovaný opakujúcimi sa požiadavkami na cron.php. Nevýhodou je, že musíte mať prístup k riadkovej verzii PHP:
Použitie programu crontab v Unixe
Cpanel poskytuje iba webové rozhranie pre unixovú utilitu známu ako crontab. Ak máte na Unixe prístup k príkazovému riadku, môžete spustiť crontab pomocou príkazu:
crontab -e
a pridaním napr. nasledujúceho príkazu:
*/30 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php
Prvých päť položiek sú časy, kedy má byť cron spustený, nasledovaných samotným spusteným programom. Hviezdička je divoký znak a znamená ľubovoľný čas. Uvedený príklad znamená spúšťať príkaz wget -q -O /dev/null... každých 30 minút (*/30), každú hodinu (*), každý deň v mesiaci (*), každý mesiac (*), každý deň v týždni (*).
Prepínač "O" v "-O" je veľké O a nie nula a hovorí, že výstup má byť presmerovaný do "/dev/null", čo znamená, že sa má zahodiť.
Obvykle vám príkaz "crontab" otvorí editor `vi`. Tu vstúpite do "vkladacieho režimu" stlačením "i" a napíšte vyššie uvedený príkaz. Pre opustenie "vkladacieho režimu" stlačte ESC. Uloženie a opustenie crontabu vykonáte napísaním príkazu ":wq", pre opustenie bez uloženia príkaz ":q!" (píšte bez uvodzoviek).
Viď tiež
- Using Moodle Cron - can someone give me a quick confirmation of function? diskusia vo fóre
