diff --git a/hosts/vm/mediakiwi/mediawiki.nix b/hosts/vm/mediakiwi/mediawiki.nix index bd51594..dde7f66 100644 --- a/hosts/vm/mediakiwi/mediawiki.nix +++ b/hosts/vm/mediakiwi/mediawiki.nix @@ -52,6 +52,41 @@ in services.syslogd.enable = true; + # Tâches lourdes à gérer au fond https://www.mediawiki.org/wiki/Manual:Job_queue + systemd.services.mediawiki-jobs = + let + # Hack pour retrouver la conf + conf = config.services.phpfpm.pools.mediawiki.phpEnv.MEDIAWIKI_CONFIG; + php = "${config.services.mediawiki.phpPackage}/bin/php"; + maintenanceScript = "${config.services.mediawiki.finalPackage}/share/mediawiki/maintenance/run.php"; + runJobs = "MEDIAWIKI_CONFIG='${conf}' ${php} ${maintenanceScript} runJobs --maxtime=3600"; + in + { + description = "Tâches lourdes de Mediawiki"; + wantedBy = [ "multi-user.target" ]; + after = [ "phpfpm-mediawiki.service" ]; + path = [ pkgs.mediawiki ]; + # Inspiré de https://www.mediawiki.org/wiki/Manual:Job_queue + script = '' + while true; do + ${runJobs} --type="enotifNotify" + # --wait pour ne pas boucler pour rien + ${runJobs} --wait --maxjobs=20 + # Au bout de 20 jobs on attend pour éviter une surcharge du serveur + sleep 10 + done + ''; + + serviceConfig = { + Restart = "always"; + RestartSec = "60s"; + User = "mediawiki"; + Nice = 10; + ProtectSystem = "full"; + OOMScoreAdjust = 200; + }; + }; + services.mediawiki = { enable = true; @@ -72,6 +107,7 @@ in # Server settings $wgFavicon = 'https://www.crans.org/images/favicon.ico'; $wgLogo = 'https://www.crans.org/images/crans.svg'; + $wgJobRunRate = 0; # On fait les jobs manuellement dans un systemd. # Files and Uploads $wgMaxUploadSize = 512 * 1024 * 1024;