Le cron ne se lance plus

Le cron ne se lance plus

par Claire Martin,
Nombre de réponses : 37

Bonjour à tous, 

Déjà voici l'environnement du Moodle dont je m'occupe : version 3.9/ php 7.2/ base de données Mysql/ thème Classic

J'ai pas mal cherché sur d'autre discussion (en anglais et en français). J'ai trouvé beaucoup de discussion sur le cron qui ne se lancer pas mais je n'ai pas trouvé de soucis ressemblant au mien. 

Je vous expose mon problème : depuis que j'ai fais la mise à jour de Moodle 3.5 jusque Moodle 3.9, le cron ne se lance plus. Dans l'onglet administration du site > notification, j'ai la notification qui m'indique que "le cron ne c'est pas lancé depuis xx et devrait être lancé toutes les 1 minutes". 

Quand je lance le cron en utilisant l'url (nomdedomainemoodle/admin/cron.php), les tâches se lancent et le cron s'éxecute correctement 


Cependant, quand je lance le cron depuis un invité de commande (avec /usr/bin/php /chemin/de/moodle/admin/cli/cron.php comme dans écrit dans cette doc https://docs.moodle.org/4x/fr/Cron), voila ce que j'obtiens : 



De ce que je comprends, le cron cherche à charger certains fichiers qui n'existe pas. Mais je ne comprend pas le error/generalexceptionmessage.

En faisant des recherches sur cette erreur, j'ai cru voir que l'erreur pouvait venir d'un plugin défectueux ou de certaines bibliothèque php qui ne sont pas installé ou encore de la version de php. 

Voici à quoi ressemble ma ligne pour lancer le cron : 


Voila, j'espère que vous pourrez m'aider à résoudre mon problème ou au moins à me donner des idées de pistes de réflexion. 

Merci d'avance et bonne journée

Claire 

Moyenne des évaluations  -
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

Bonjour Claire,

Est-ce que tu n'aurais pas fait une fausse manip ?

Le message semble dire qu'il ne trouve pas le fichier msql.dll, mais est-ce que le fichier n'est pas plutôt mysql.dll et que tu aurais par erreur supprimé le y de mysql ?

Je suppose que ce nom doit apparaître dans le fichier php.ini ?

En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,
Merci pour la réponse.
Normalement je n'ai pas touché à ces fichiers. Quand je regarde dans le dossier indiqué dans l'erreur, les fichiers n'existe pas. Je n'es même pas de fichier msql.dll. A vrai dire, dans le dossier indiqué dans l'erreur de la console, je n'ai aucun fichier .dll

J'ai vérifié le fichier php.ini mais je n'ai pas vu indiquer msql

J'espère que ma réponse est assez claire.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles
Il faudrait nous en dire plus sur ton installation. Est-ce que tu passes par un hébergeur ou bien est-ce que Moodle est installé sur ton propre serveur ?
Avec quel système d'exploitation ?
Est-ce que le dossier /usr/lib/php/20151012 existe ?
Si ce n'est pas dans le fichier php.ini, il doit bien y avoir un fichier où le nom msql.dll apparaît. Il faudrait réussir à trouver quel est ce fichier.
En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Bien sur :
Moodle est installer sur un serveur interne de l'entreprise dans laquelle je travaille.
Pour le système d'exploitation je ne suis pas sûre, je crois qu'il s'agit de Windows.
Oui le dossier existe bien.
Je vais essayer de voir s'il y a un fichier avec le nom msql.dll.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles
En attendant, si tu veux faire fonctionner ton cron régulièrement, il existe un site www.cron-job.org qui permet de lancer régulièrement ton cron grâce à son URL.
Pour moi, msql.dll n'est pas un fichier qui existe. Par contre ça doit être mysql.dll. C'est pour ça que je pense à une fausse manip de suppression d'un caractère dans un fichier de configuration, mais lequel ???
En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Merci pour le lien je vais regarder.
En recherchant 'msql.dll' dans mes fichiers, j'ai remarquais que cela venait bien d'un fichier php.ini mais qui correspond à une autre version de php (l'erreur venait du dossier php 7.0). Dans le fichier, les erreurs afficher n'étais pas commenté.
Cependant, j'ai encore l'erreur 'error/generalexeptionmessage'
Peut-être l'avait vous déjà rencontré ?
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles
Non mais est-ce que tu pourrais nous mettre une capture du message complet ?
Et est-ce que le mode débogage est activé ? (Dans Administration du site > Développement > Messages de débogage)
En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,
Voici la capture d'écran complet de l'erreur dans l'invité de commande
 

Oui le débogage est activé.

Claire
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

Est-ce qu'il n'y a pas un fichier de log qui donnerait des explications sur cette erreur ?

En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
@Jean-Gabriel,
Je suppose que tu veux dire un fichier de log Apache ou PHP ou autre type de log sur le serveur, et non pas un fichier de log propre à Moodle ?
En réponse à Joseph Rézeau

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

où je peux trouver ce fichier log ?
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Joseph Rézeau,
Avatar Développeurs Avatar Développeurs de plugins Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
"sur un serveur interne de l'entreprise dans laquelle [tu] travaille[s]"
En réponse à Joseph Rézeau

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

@Joseph: "Je suppose que tu veux dire un fichier de log Apache ou PHP ou autre type de log sur le serveur, et non pas un fichier de log propre à Moodle ?" -> Oui, effectivement, j'ai oublié de préciser qu'il fallait chercher dans les logs php (ou peut-être Apache).

@Claire: "où je peux trouver ce fichier log ?" -> Ca dépend des installations, mais il doit peut-être y avoir un dossier /log ou /logs.

Par exemple, pour une installation sur Windows de WAMP, il faut généralement regarder dans le dossier C:/wamp/logs. Tu dois y trouver les fichiers access.log, apache_error.log, error.log, mysql.log et php_error.log.


En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
J'ai bien réussi à trouver le dossier log mais je n'arrive pas à trouver l'erreur dans les différents fichiers : j'ai trouvé les fichiers acces.log/ error.log.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

Même si tu ne trouves pas cette erreur, est-ce que tu ne trouves pas une erreur qui se produirait à la même heure ?

D'autre part, est-ce que le mode de débogage de Moodle est bien sur "Développeur" ?

En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,
En cherchant j'ai trouvé une erreur (même si je ne trouve pas que ça ressemble à une erreur) qui c'est produit ce matin quand j'ai réessayé de lancer le cron :
 "POST /lib/ajax/service.php?sesskey=kDRxrbp5oK&info=core_fetch_notifications HTTP/1.1" 200 6141 "https://cours-fad-preprod-custom.ensg.eu/admin/user.php?sort=name&dir=ASC&perpage=30&page=0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"


Et oui mon mode débogage est bien paramétré sur "développeur". 

En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles
Est-ce que tu as des plugins tiers installés sur ta plateforme ? Si oui, est-ce qu'ils sont tous compatibles avec ta version 3.9 de Moodle ? Peut-être que certains plugins étaient compatibles avec ta version 3.5 mais qu'ils n'acceptent pas de fonctionner avec la version 3.9.
Est-ce que tu as bien installé l'extension mbstring dans ton PHP ?
En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Oui j'ai installé des plugin et j'ai vérifié s'ils étaient bien compatibles avec Moodle 3.9 et tout es ok. Je les ai tous mis à jour quand il le fallait et oui l'extension mbstring est installé
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Valery Fremaux,
Avatar Développeurs de plugins

Bonjour Claire,

de ce que je peux conclure de ce que tu as donné comme info :

Sur les problèmes de libairies :

Voir si le php disponible en "commande système" est le même que celui qui est utilisé pour faire tourner moodle à travers le serveur Web. Il est possible que plusieurs versions de php soient installées sur le serveur certaines avec les modules (et les dlls) activées d'autres pas. A vérifier avec /usr/bin/php -v

Deuxième chose : en effet de temps en temps, le cron n'arrive pas à tourner pour plusieurs raisons identifiées (fausse détection d'une mise à jour en attente, ou autre cas un peu exotiques)

En général la purge complète et physiques des caches de moodle solutionne le problème. Cela fait 10 ans que je cherche l'origine de certaines bizarreries du cache sans trouver la solution clin d’œil

En réponse à Valery Fremaux

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

Merci pour vos pistes.
En faisant la commande /usr/bin/php -v je me suis rendu compte que la commande me disait qu'il utilise php 7.0 ! Ce qui est très étrange car Moodle est bien en 7.2. Peut-être que le soucis peut venir de la ?
Sur le serveur de ma plateforme Moodle, il y a php 7.0, php 7.2 et quelques morceau de php 8.0 qui sont installés.

Pour purger les caches de moodle, j'utilise le bouton présent dans administration du site > développement > puger les caches. C'est aussi ce que vous faites ?
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

Bonjour Claire,

Et dans Administration du site > Serveur > Info PHP, c'est bien PHP 7.2 ? Et quand tu recherches dans cette page "php", est-ce que les différents dossiers indiqués sont en /php72/ pour être sûr qu'il n'y ait pas de mélange de versions ? Même si je ne vois pas comment ce serait possible.

En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Oui quand je regarde dans administration du site > Serveur > Info php c'est bien php 7.2. Je viens de vérifié et tous les dossiers sont bien en /php7.2/
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Bonjour Claire,

Du coup, et comme tu l'exposes, cela signifie que sur ton serveur, plusieurs versions de PHP sont installées, et utilisées.

Moodle utilise donc PHP 7.2, lorsqu'il est consulté en ligne.

Mais pour le cron, la version appelée est PHP 7.0, ce qui pose peut-être des problèmes, surtout si toutes les extensions nécessaires ne sont pas installées sur cette version.

La commande "which php" (ou, bien plus long mais plus sûr : "find / -type f -name php 2>/dev/null") devrait te permettre de trouver les chemins des différentes versions de PHP installées.
Il faudra ensuite adapter le chemin vers le cron pour utiliser la version 7.2.

Séverin
Moyenne des évaluations Utile (2)
En réponse à Séverin Terrier

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

Je ne sais pas si elles sont toutes utilisés, il faudra que je me penche la dessus.

En effet, c'est aussi se que je me disais en ce qui concerne les versions de php.

J'ai trouvé le chemin vers les versions de php. En utilisant la commande, il m'indique le chemin usr/bin/php (qui correspond à la commande présente dans la crontab)
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Manifestement, vu les informations que tu as posté, si, au moins 7.2 et 7.0 sont utilisées.

Tu devrais essayer la deuxième commande que j'ai indiqué clin d’œil
En réponse à Séverin Terrier

Re: Le cron ne se lance plus

par Claire Martin,
oui je comprend bien que les deux sont utilisés.

J'ai essayé la deuxième commande mais il ne m'a retourner que quelque fichiers
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Séverin Terrier,
Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs
Oui, mais dans ces "quelques fichiers", il doit y avoir celui effectivement utilisé par Moodle, en 7.2.

Tu devrais pouvoir lancer pour chacun une commande avec le paramètre -v pour confirmer les versions de chacun.

Et adapter l'appel du cron en remplaçant /usr/bin/php par le chemin et fichier adapté.

Séverin
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Valery Fremaux,
Avatar Développeurs de plugins
La purge des caches par l'administration ne suffit pas toujours. Il y a deux fichiers importants a bien effacer : /muc/config.php et core_component.php. Ces deux fichiers peuvent être responsable d'une collision entre le cron et la mise à jour de moodle.
En réponse à Valery Fremaux

Re: Le cron ne se lance plus

par Claire Martin,
Merci pour le conseil je vais essayer de trouver les fichiers et les effacer.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Christophe BOITEUX,
Avatar Moodleurs particulièrement utiles
Bonjour,
tu peux aussi totalement supprimer le dossier cache de ton serveur.
On peut sans problème renommer le dossier ex: cache_old.
Le dossier /cache se trouve dans /moodledata.
Moodle re-créera automatiquement un nouveau dossier /cache.

Mais je penche aussi sur le problème de php qui est la cause du dysfonctionnement.

Ton serveur doit fonctionner dans la même version Moodle et Cron (en ligne de commande).

Tu dis ne pas pouvoir utiliser la commande -v tu ne dois pas avoir les droits essaie par exemple (ajoute sudo) : 

sudo php -v

Ou demande des droits plus étendus à ton administrateur.

Essai la commande pour voir et modifier la version de php :
sudo update-alternatives --config php
Tu dois aussi activé les modules :
sudo a2enmod php7.2

Et redémarrer ton serveur si c'est apache2 voici la commande :

sudo service apache2 restart

J'espère que cela peut t'aider à avancé sur ton problème.

Moyenne des évaluations Utile (1)
En réponse à Christophe BOITEUX

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,
Déjà merci pour les pistes !
J'ai trouvé le dossier caches et je l'ai supprimé mais cela n'a pas changé grand chose.

Le problème de php semble être la piste la plus probable. Je n'ai peut être pas été assez clair : quand j'utilise la commande php -v, j'ai les autorisations (c'est comme ça que j'ai remarqué que les versions de php n'étaient pas les même)
Les soucis de permissions sont pour les fichiers qui me sont renvoyés quand je teste la commande proposé par Séverin ("find / -type f -name php 2>/dev/null"). Il m'a proposé d'utiliser -v pour vérifier la version de php appeler par les fichiers

Merci pour les commandes ! je vais les tester pour voir si ça fonctionne et je reviendrais vers vous.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par didier cadiou,
Bonjour Claire je pense que la piste php est effectivement à creuser. PHP a une constitution modulaire qui intègre de nombreux modules pour étendre ses possibilités. Une installation standard de Moodle requiert que php possède un certains nombre de ces modules. Le message d'erreur que tu as mis dans ton premier message indique très probablement qu'il manque des modules (msql ?, curl, soap) à la version de php en mode CLI (quand il s'exécute en ligne de commande).

La première chose à faire comme cela a déjà été dit est de mettre à plat tes versions de php. php en mode web et php en mode CLI doivent être dans la même version. Effectivement comme l'indiquait Christophe 'sudo update-alternatives' est la façon la plus propre de le faire (voir https://manpages.debian.org/bullseye/dpkg/update-alternatives.1.fr.html). En complément sur nos serveurs nous désactivons carrément les versions de php que nous n'utilisons pas (comme nous utilisons php comme un service autonome, php-fpm, ça donne par exemple pour un php7.3 que nous n'utiliserions pas systemctl stop php7.3-fpm et systemctl disable --now php7.3-fpm.service pour pas qu'il ne se réactive au prochain redémarrage serveur).

  • La version de php en mode web peut se tester depuis la page phpinfo de ton Moodle https://url_de_ton_moodle/admin/phpinfo.php,. Au passage, tu y verras aussi des pavés par modules. Tu devrais notamment en avoir un pour les modules soap et curl par exemple.
  • La version de php en mode CLI se teste en tapant 'php -v' dans un terminal sur ton serveur. Tu peux aussi y regarder l'équivalant du phpinfo avec 'php -i' et la liste des modules installés avec 'php -m'.
Une fois que tes versions sont celles attendues et si tu as toujours le même type de message, je pense qu'il faudra que tu (ré)installes les modules qui semble manquer ou poser soucis. Par exemple pour curl et si ton serveur est de type Linux Debian : 'sudo apt install php7.2-curl'.
Moyenne des évaluations Utile (2)
En réponse à didier cadiou

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

En effet, le problème venait bien de là. Pour une raison inconnue, les versions n'étaient pas les même. J'ai pu les changer en utilisant la commande "update-alternatives".
En ce qui concerne les modules, c'est parce que le cron cherchait dans les fichiers de php 7.0 où php_soap et php_curl n'était pas bien intégré.
Je pense que c'est une bonne idée de désactiver les autres versions de php pour éviter les problèmes. Merci pour la commande permettant de faire ça.
Oui, dans le phpinfo c'est bien php 7.2 qui est prit en compte et les modules sont bien installé.
Merci pour toutes les commandes qui pourront me servir à l'avenir.
En réponse à Christophe BOITEUX

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

J'ai essayé et j'ai réussi à changer la version de php mais cela n'a rien changer. J'ai bien relancé apache mais je n'ai pas l'impression qu'il y ai une différence.
Mais merci quand même pour l'indication des commandes pour changer la version.
En réponse à Claire Martin

Re: Le cron ne se lance plus

par Jean-Gabriel DEPINOY,
Avatar Moodleurs particulièrement utiles

Bonjour Claire,

Qu'est ce qui ne fonctionne plus ? C'est toujours ton cron ? Tu as toujours le message "error/generalexceptionmessage" ?

Est-ce que tu as bien vérifié si ton cron tournait bien maintenant en php 7.2?

Si tu lances le cron directement par le navigateur, est-ce que ça fonctionne ?

Peux-tu nous donner la liste des plugins tiers que tu utilises ?

En réponse à Jean-Gabriel DEPINOY

Re: Le cron ne se lance plus

par Claire Martin,
Bonjour,

Déjà je remercie tout le monde pour l'aide.
Après avoir suivit les commandes précédentes, j'ai pu changer la version de php qui est utilisées pour la mettre en 7.2. J'ai aussi changer le chemin dans le cron pour que ce soit php 7.2 qui soit utilisé. Je n'ai plus l'erreur error/generalexceptionmessage et le cron semble refonctionner normalement. J'ai encore des vérifications à faire mais dans l'ensemble, le problème est réglé.