Cron

Z MoodleDocs

Prejsť na: navigácia, hľadanie

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
alebo
c:\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ž