3.3.x - Tâches programmées \auth_cas\task\sync_task

3.3.x - Tâches programmées \auth_cas\task\sync_task

par Jérémie Pilette,
Nombre de réponses : 5
Bonjour,

je souhaite lancer une synchronisation pour la création des comptes utilisateurs à partir de CAS/LDAP.

Cependant lorsque je clique sur "Lancer maintenant" voilà le message que j'obtiens.

J'ai activé cette option dans le config.php, mais cela ne change rien :

$CFG->lock_factory="\\core\\lock\\db_record_lock_factory";

Unable to get task lock for auth_cas\task\sync_task.

En ligne de commande, j'obtiens la mêle chose :

php schedule_task.php --execute=\\auth_cas\\task\\sync_task

Execute scheduled task: Tâche de synchronisation pour utilisateurs CAS (auth_cas\task\sync_task)
Cannot obtain task lock


Auriez-vous une idée?

En vous remerciant,

Jérémie

Moyenne des évaluations  -
En réponse à Jérémie Pilette

Re: 3.3.x - Tâches programmées \auth_cas\task\sync_task

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

Bonjour,

Cela indique qu'une tâche s'est mal terminée et qu'un lock persiste dans la base

Certainement lié aux problèmes de synchronisation avec LDAP.

C-à-d qu'il doit rester une entrée dans la table "mdl_lock_db" qui provoque ce blocage.

Si c'est le cas, peut-être faut-il essayer de supprimer cette entrée ?
Mais en prenant les précautions nécessaires quant à la sauvegarde des données, on ne sait jamais.

Un petit dump de la base au préalable serait toujours une bonne chose ...

Bruno

En réponse à Bruno Malaval

Re: 3.3.x - Tâches programmées \auth_cas\task\sync_task

par Jérémie Pilette,

Bonjour,

merci pour ta réponse Bruno.

J'ai trouvé le problème.

Il y avait un nom d'utilisateur dans mon LDAP avec un caractère spécial.

J'ai trouvé en utilisant la méthode (deprecated) : lancer en ligne de commande : le scrypt sync_user.php de la méthode d'authentification CAS:

php /chemin_vers_moodle/auth/cas/cli/sync_user.php

Le script s'arrête au bout d'un moment en précisant qu'il y a un problème de caractère.

J'ai ensuite vérifié tous mes nom d'utilisateur.

Il y avait un nom d'utilisateur avec une apostrophe ('). Caractère spécial qui faisait stopper le scrypt.

Après avoir retirer ce caractère, cela a fonctionné.

Jérémie



Moyenne des évaluations Utile (1)
En réponse à Jérémie Pilette

Re: 3.3.x - Tâches programmées \auth_cas\task\sync_task

par Jérémie Pilette,

Bonjour,

un autre problème avec la synchronisation CAS/Moodle.

Après avoir constaté que certains étudiants n'apparaissaient pas dans Moodle à la suite d'une synchonisation CAS avec les tâches programmées, je suis repasser à l'ancienne méthode (CLI), et voilà les erreurs que j'obtiens.

php sync_users.php
[AUTH CAS] The sync users cron has been deprecated. Please use the scheduled task instead.
Connection au serveur LDAP...Création de la table temporaire tmp_extuser...............................................................................................................................................................................................................

...................................................................................................................................................................................................................................

..........................................................Default exception handler: Erreur d'écriture vers la base de données Debug: Duplicate entry '1-cgaches' for key 'mdl2_tmpextu_mneuse_uix'
INSERT INTO mdl2_tmp_extuser (username,mnethostid) VALUES(?,?)
[array (
  0 => 'cgaches',
  1 => '1',
)]
Error code: dmlwriteexception
* line 489 of /lib/dml/moodle_database.php: dml_write_exception thrown
* line 1274 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
* line 1050 of /auth/ldap/auth.php: call to mysqli_native_moodle_database->insert_record_raw()
* line 728 of /auth/ldap/auth.php: call to auth_plugin_ldap->ldap_bulk_insert()
* line 328 of /auth/cas/auth.php: call to auth_plugin_ldap->sync_users()
* line 66 of /auth/cas/cli/sync_users.php: call to auth_plugin_cas->sync_users()

!!! Erreur d'écriture vers la base de données !!!
!! Duplicate entry '1-cgaches' for key 'mdl2_tmpextu_mneuse_uix'
INSERT INTO mdl2_tmp_extuser (username,mnethostid) VALUES(?,?)
[array (
  0 => 'cgaches',
  1 => '1',
)]
Error code: dmlwriteexception !!
!! Stack trace: * line 489 of /lib/dml/moodle_database.php: dml_write_exception thrown
* line 1274 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
* line 1050 of /auth/ldap/auth.php: call to mysqli_native_moodle_database->insert_record_raw()
* line 728 of /auth/ldap/auth.php: call to auth_plugin_ldap->ldap_bulk_insert()
* line 328 of /auth/cas/auth.php: call to auth_plugin_ldap->sync_users()
* line 66 of /auth/cas/cli/sync_users.php: call to auth_plugin_cas->sync_users()
 !!
Potential coding error - existing temptables found when disposing database. Must be dropped!


Est-ce que cela parle à quelqu'un ?

En vous remerciant,

Jérémie

En réponse à Jérémie Pilette

Re: 3.3.x - Tâches programmées \auth_cas\task\sync_task

par Bruno Malaval,
Avatar Moodleurs particulièrement utiles

Bonjour,

Tout d'abord, en ligne de commande, le script sync_users.php ne devrait plus être lancé directement avec php,
mais en utilisant

php schedule_task.php --execute=\\auth_cas\\task\\sync_task

(D'où l'alerte :

[AUTH CAS] The sync users cron has been deprecated. Please use the scheduled task instead.

Ensuite, pour l'autre erreur, il semble qu'il y ait un doublon avec l'utilisateur "cgaches" ... ?

Il faudrait peut-être vérifier de ce coté et contrôler que les attributs utilisés au niveau du CAS (et donc LDAP derrière je suppose) sont bien corrects. Je pense notamment à la présence d'un espace dans le nom utilisateur.
Si vous avez 2 comptes comme "cgaches 1" et "cgaches 2".

Dans ce cas, seule la première partie du nom serait utilisée comme username, et donc on se retrouve avec un doublon

A vérifier ....

Bruno


Moyenne des évaluations Utile (2)
En réponse à Bruno Malaval

Re: 3.3.x - Tâches programmées \auth_cas\task\sync_task

par Jérémie Pilette,

Bonjour Bruno,

merci pour la réponse.

Effectivement après une recherche plus approfondie dans notre LDAP, il y avait ce doublon.

Je n'ai pas paramétré le LDAP avec le module ppolicy permettant de s'assurer de l'unicité du nom d'utilisateur.

En te remerciant,

Jérémie