LINUX:MediaWiki - Tâche de fond

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour au menu de MediaWiki


But

En marge de l'interface Web, MediaWiki doit effectuer diverses tâches directement au niveau du système.

Chaque fois qu'une modification est effectuée, une page créé,... une ou plusieurs tâches sont mises en file d'attente. J'ai remarqué que l'extension "Semantic MediaWiki" crée de très nombreuses tâches qui peuvent se monter à plusieurs centaines d'actions.

Cette files d'actions doivent être exécutées afin de vider cette queue.

Il y a divers manières d'y arriver selon votre contexte.


LocalSettings.php

La première solution consiste à considérer la variable "$wgJobRunRate". Sa valeur doit être supérieure ou égale à zéro. Par défaut, cette valeur vaut "1". Cette variable désigne le nombre de tâches qui seront effectuées à chaque chargement de pages via l'interface Web. Si cette variable vaut "0", la file d'attente des tâches ne se videra pas. Si le nombre de "clics" est insuffisant, la file va grandir. Il faut donc adapter ce paramètre en fonction dans le fichier "LocalSettings.php".


Interactif

Alternativement il est possible de la vider en ligne de commande en mode console Linux.

Dans le logiciel MediaWiki, il existe un répertoire "maintenance". Ce dernier rassemble un ensemble d'outils. L'un d'eux nous intéresse. Il s'agit du script "runJobs.php".

Voici la commande à exécuter:

php81 /web/wiki.39/maintenance/runJobs.php --maxtime=3600


Crontab

Cette commande précédente peut être lancée à intervalle régulier via le Crontab.

Voici un exemple de ligne ajoutée dans le fichier "/etc/crontab" qui la lance tous les quarts d'heure:


0,15,30,45 * * * * apache /usr/bin/php81 /web/wiki.39/maintenance/runJobs.php --maxtime=3600 > /var/log/mediawiki/runJobs.log

N'oubliez pas de créer le répertoire "var/log/mediawiki" et d'adapter les droits d'accès et de propriété à l'utilisateur "apache".


Systemd

Une solution alternative consiste à créer un service spécifique géré par Systemd.

En premier lieu, on crée un script que l'on nommera "mwjobrunner.bat" que l'on place dans le répertoire "/usr/local/bin":


#!/bin/bash
# Put the MediaWiki installation path on the line below
MW_INSTALL_PATH="/web/wiki.39"
RUN_JOBS="$MW_INSTALL_PATH/maintenance/runJobs.php --maxtime=3600"
echo Starting job service...
# Wait a minute after the server starts up to give other processes time to get started
sleep 60
echo Started.
while true; do
   # Job types that need to be run ASAP no matter how many of them are in the queue
   # Those jobs should be very "cheap" to run
   php81 $RUN_JOBS --type="enotifNotify"
   # Everything else, limit the number of jobs on each batch
   # The --wait parameter will pause the execution here until new jobs are added,
   # to avoid running the loop without anything to do
   php81 $RUN_JOBS --wait --maxjobs=20
   # Wait some seconds to let the CPU do other things, like handling web requests, etc
   echo Waiting for 10 seconds...
   sleep 10
done

On adapte les droits d'accès:

chmod 755 /usr/local/bin/mwjobrunner.bat

Ensuite on crée le service que l'on nommera "mw-jobqueue.service" que l'on place dans le répertoire "/etc/systemd/system":


[Unit]
Description=MediaWiki Job runner
 
[Service]
ExecStart=/usr/local/bin/mwjobrunner.bat
Nice=10
ProtectSystem=full
User=apache
OOMScoreAdjust=200
StandardOutput=journal
 
[Install]
WantedBy=multi-user.target

Il reste à l'activer:

systemctl daemon-reload
systemctl enable mw-jobqueue.service
systemctl start mw-jobqueue.service

On peut par la suite suivre les messages envoyés par notre script:

systemctl status mw-jobqueue.service




retour au menu de MediaWiki