Řešení více instancí Moodle na jednom serveru + cron

Řešení více instancí Moodle na jednom serveru + cron

by Igor Kopetschke -
Number of replies: 0

Přátelé,

potýkal jsem se s vyřešením problému několika instancí Moodle na jednom serveru, konkrétně pro 6 virtuálních domén. Nechtělo se mi do modulu pro virtuální Moodly a tak jsem se nechal inspirovat zde :

https://moodle.org/mod/forum/discuss.php?d=13211#p847890

Nicméně toto řešení neumělo pracovat s cron.php pro jedbnotlivé subdomény z příkazové řádky. Nabízím tedy rozšíření, který mi bezproblémově funguje.


Mám několik virtuálních domén (instancí moodle) a má adresářová struktura vypadá takto :

/var/www/html/main.moodle (adresář s instalací moodle)
/var/www/html/sub1.moodle.site -> symlink na main.moodle /var/www/html/sub2.moodle.site -> symlink na main.moodle /var/www/html/sub3.moodle.site -> symlink to main.moodle .... atd ....

Takto vypadá můj config.php s funkčním cron.php (a i dalšími admin scripty) volaným z příkazové řádky pro několik subdomén. 

define('MOODLE_NO_DOMAIN', 'none');
$domain = MOODLE_NO_DOMAIN;
if ( defined('CLI_SCRIPT') && CLI_SCRIPT == true) { // CALLED FROM COMMANDLINE - cron.php etc .. // regex je treba upravit pro konkretni potrebu ...
        preg_match('/^(.*\/)*(.*\.moodle\.site)\/.*$/',$_SERVER['PHP_SELF'],$matches);
        if ( count($matches) > 0 ) {
                $domain = $matches[count($matches) - 1];
        }
} else { // CALLED FROM BROWSER         $domain = $_SERVER['HTTP_HOST']; } // ZDE POKRACUJI TAK JAK BYLO UVEDENO V PUVODNIM PRISPEVKU VIZ VYSE
switch ($domain) {
// configuration for subdomain 1
case 'sub1.domain.com':
$CFG->dbname = 'sub1_moodle'; // if your database is called sub1_moodle for this subdomain
$CFG->wwwroot = 'http://sub1.moodle.site'; // no trailing slash
$CFG->dataroot = '/path/to/sub1data/'; // depends on where you put your datadir
break;
// configuration for subdomain 2
case 'sub2.domain.com':
$CFG->dbname = 'sub2_moodle'; // if your database is called sub2_moodle for this subdomain
$CFG->wwwroot = 'http://sub2.moodle.site'; // no trailing slash
$CFG->dataroot = '/path/to/sub2data/'; // depends on where you put your datadir
break;
// et cetera
default:
// ... přesměrování na stránku s rozcestníkem na jednotlivé Moodle
} $CFG->dirroot='/var/www/html/main.moodle';

Ülohy cronu (a všech dalších admin scriptů) musí být volány s absolutní nebo relativní cestou obsahující subdoménu:

php /var/www/html/sub1.moodle.site/admin/cli/cron.php

nebo

php sub1.moodle.site/admin/cli/cron.php

Pro spouštění všech cronů nabízím následující velice jednoduchý (a vylepšení hodný) sript, který volám už systémovým cronem

#! /bin/bash
WWW_ROOT="/var/www/html"
DIRS="sub1.moodle.site sub2.moodle.site sub3.moodle site"
for dir in $DIRS
do
        echo "$WWW_ROOT/$dir"
        php "$WWW_ROOT/$dir/admin/cli/cron.php"
done

Doufám, že tento příspěvek bude někomu užitečný ...

Count of ratings: -