Re bonjour,
Après un test plus fin pour connaitre précisément l'origine de la panne, j'ai vu que certaines taches MoodleCron (celles qui servent à envoyer les messages) ont produit des erreurs dont voici la description :
Type de l'événement : Erreur
Source de l'événement : Moodlecron.exe
Catégorie de l'événement : Aucun
ID de l'événement : 0
Date : 08/08/2006
Heure : 22:31:45
Utilisateur : N/A
Ordinateur : WEBDFD
Description :
La description pour l'ID d'événement ( 0 ) dans la source (Moodlecron.exe) est introuvable. L'ordinateur local n'a peut-être pas les informations de Registre ou les librairies requises pour afficher les messages émanant d'un ordinateur distant. Vous pourrez peut-être utiliser l'option /AUXSOURCE= pour récupérer cette description. Reportez-vous aux rubriques Aide et support pour plus de détails. Les informations suivantes font partie de l'événement : Socket Error # 10054
Connection reset by peer..
|
Par ailleurs, quand je fais en sorte de lancer moodleCron par l'intermédiaire du navigateur, je vois que le serveur web se met en boucle infinie et fini, lui aussi par "planter" : voici ce qu'il indique
Type de l'événement : Erreur
Source de l'événement : Application Error
Catégorie de l'événement : (100)
ID de l'événement : 1000
Date : 08/08/2006
Heure : 22:31:45
Utilisateur : N/A
Ordinateur : WEBDFD
Description :
Application défaillante w3wp.exe, version 6.0.3790.1830, module défaillant php5isapi.dll, version 5.1.4.4, adresse de défaillance 0x00002437.
Données :
0000: 41 70 70 6c 69 63 61 74 Applicat
0008: 69 6f 6e 20 46 61 69 6c ion Fail
0010: 75 72 65 20 20 77 33 77 ure w3w
0018: 70 2e 65 78 65 20 36 2e p.exe 6.
0020: 30 2e 33 37 39 30 2e 31 0.3790.1
0028: 38 33 30 20 69 6e 20 70 830 in p
0030: 68 70 35 69 73 61 70 69 hp5isapi
0038: 2e 64 6c 6c 20 35 2e 31 .dll 5.1
0040: 2e 34 2e 34 20 61 74 20 .4.4 at
0048: 6f 66 66 73 65 74 20 30 offset 0
0050: 30 30 30 32 34 33 37 0002437
|
et enfin quand je tente d'exécuter la tache cron en invite de commande, voici le trésultat :
D:\campus\PHP>php -f "d:\campus\moodle\admin\cron.php"
<pre>
Server Time: Fri, 11 Aug 2006 18:20:21 +0200
Starting activity modules
Processing module function assignment_cron ...done.
Processing module function forum_cron ...<div class="notifysuccess" align="cente
r">Succès</div><br />
Enregistrement de l'article 14
|
Un détail, c'est bien l'article 14 qui était à envoyer
J'ai pourtant retiré tous les murs de feu et antivirus qui pourraient bloquer les mails sur mon serveur sans plus de succes.
Enfin, pour déterminer l'emplacement précis de la panne je suis allé modifier à la main le fichier lib.php du module Forum et voici le résultat de la tâche cron :
D:\campus\PHP>php -f "d:\campus\moodle\admin\cron.php"
<pre>
Server Time: Fri, 11 Aug 2006 18:33:03 +0200
Starting activity modules
Processing module function forum_cron ...<div class="notifysuccess" align="cente
r">Succès</div><br />
Enregistrement de l'article 151
2
3
4
5
6
7
8 juste avant mail
après ici le script semble partir en boucle infinie...
voici le code modifié dans le fichier /mod/forum/lib.php:
function forum_cron () {
/// Function to be run periodically according to the moodle cron
/// Finds all posts that have yet to be mailed out, and mails them
/// out to all subscribers
global $CFG, $USER;
static $strforums = NULL;
if ($strforums === NULL) {
$strforums = get_string('forums', 'forum');
}
if (!empty($USER->id)) { // Remember real USER account if necessary
$realuser = $USER;
}
/// Posts older than 2 days will not be mailed. This is to avoid the problem where
/// cron has not been running for a long time, and then suddenly people are flooded
/// with mail from the past few weeks or months
$timenow = time();
$endtime = $timenow - 0;//$CFG->maxeditingtime;
$starttime = $endtime - 48 * 3600; /// Two days earlier
if ($posts = forum_get_unmailed_posts($starttime, $endtime)) {
/// Mark them all now as being mailed. It's unlikely but possible there
/// might be an error later so that a post is NOT actually mailed out,
/// but since mail isn't crucial, we can accept this risk. Doing it now
/// prevents the risk of duplicated mails, which is a worse problem.
if (!forum_mark_old_posts_as_mailed($endtime)) {
mtrace('Errors occurred while trying to mark some posts as being mailed.');
return false; // Don't continue trying to mail them, in case we are in a cron loop
}
@set_time_limit(0); /// so that script does not get timed out when posting to many users
$urlinfo = parse_url($CFG->wwwroot);
$hostname = $urlinfo['host'];
foreach ($posts as $post) {
mtrace(get_string('processingpost', 'forum', $post->id), '');
if (! $userfrom = get_record('user', 'id', $post->userid)) {
mtrace('Could not find user '.$post->userid);
continue;
}
mtrace('1');
if (! $discussion = get_record("forum_discussions", "id", "$post->discussion")) {
mtrace("Could not find discussion $post->discussion");
continue;
}
mtrace('2');
if (! $forum = get_record("forum", "id", "$discussion->forum")) {
mtrace("Could not find forum $discussion->forum");
continue;
}
mtrace('3');
if (! $course = get_record("course", "id", "$forum->course")) {
mtrace("Could not find course $forum->course");
continue;
}
mtrace('4');
$cleanforumname = str_replace('"', "'", strip_tags($forum->name));
$userfrom->customheaders = array ( // Headers to make emails easier to track
'Precedence: Bulk',
'List-Id: "'.$cleanforumname.'" <moodleforum'.$forum->id.'@'.$hostname.'>',
'List-Help: '.$CFG->wwwroot.'/mod/forum/view.php?f='.$forum->id,
'Message-Id: <moodlepost'.$post->id.'@'.$hostname.'>',
'In-Reply-To: <moodlepost'.$post->parent.'@'.$hostname.'>',
'References: <moodlepost'.$post->parent.'@'.$hostname.'>',
'X-Course-Id: '.$course->id,
'X-Course-Name: '.strip_tags($course->fullname)
);
mtrace('5');
if (!empty($course->lang)) {
$CFG->courselang = $course->lang;
} else {
unset($CFG->courselang);
}
mtrace('6');
$groupmode = false;
if ($cm = get_coursemodule_from_instance("forum", $forum->id, $course->id)) {
if ($groupmode = groupmode($course, $cm) and $discussion->groupid > 0) { // Groups are being used
if (!$group = get_record("groups", "id", $discussion->groupid)) { // Can't find group
continue; // Be safe and don't send it to anyone
}
}
} else {
$cm->id = 0;
}
mtrace('7');
if ($users = forum_subscribed_users($course, $forum)) {
$mailcount=0;
$errorcount=0;
foreach ($users as $userto) {
if ($groupmode) { // Look for a reason not to send this email
if (!isteacheredit($course->id, $userto->id)) {
if (!empty($group->id)) {
if (!ismember($group->id, $userto->id)) {
continue;
}
}
}
}
// make sure we're allowed to see it...
if (!forum_user_can_see_post($forum,$discussion,$post,$userto)) {
continue;
}
if ($userto->maildigest > 0) {
// This user wants the mails to be in digest form
$queue = New stdClass;
$queue->userid = $userto->id;
$queue->discussionid = $discussion->id;
$queue->postid = $post->id;
if(!insert_record('forum_queue', $queue)) {
mtrace("Error: mod/forum/cron.php: Could not queue for digest mail for id $post->id to user $userto->id ($userto->email) .. not trying again.");
}
continue;
}
/// Override the language and timezone of the "current" user, so that
/// mail is customised for the receiver.
$USER->lang = $userto->lang;
$USER->timezone = $userto->timezone;
$postsubject = "$course->shortname: ".format_string($post->subject,true);
$posttext = forum_make_mail_text($course, $forum, $discussion, $post, $userfrom, $userto);
$posthtml = forum_make_mail_html($course, $forum, $discussion, $post, $userfrom, $userto);
mtrace('8 juste avant mail');
if (!$mailresult = email_to_user($userto, $userfrom, $postsubject, $posttext,
$posthtml, '', '', $CFG->forum_replytouser)) {// lieu problable de la panne
mtrace("Error: mod/forum/cron.php: Could not send out mail for id $post->id to user $userto->id".
" ($userto->email) .. not trying again.");
add_to_log($course->id, 'forum', 'mail error', "discuss.php?d=$discussion->id#$post->id",
substr(format_string($post->subject,true),0,30), $cm->id, $userto->id);
$errorcount++;
} else if ($mailresult === 'emailstop') {
add_to_log($course->id, 'forum', 'mail blocked', "discuss.php?d=$discussion->id#$post->id",
substr(format_string($post->subject,true),0,30), $cm->id, $userto->id);
} else {
$mailcount++;
/// Mark post as read if forum_usermarksread is set off
if (!$CFG->forum_usermarksread && forum_tp_can_track_forums($forum, $userto) &&
forum_tp_is_tracked($forum, $userto->id)) {
if (!forum_tp_mark_post_read($userto->id, $post, $forum->id)) {
mtrace("Error: mod/forum/cron.php: Could not mark post $post->id read for user $userto->id".
" while sending email.");
}
}
}
mtrace('9 apres mail');
}
mtrace(".... mailed to $mailcount users.");
|
J'avoue que là je suis à la limite de mes compétances.
A titre d'information technique je suis (malheureusement) sur un serveur Windows 2003 avec IIS comme serveur Web et PHP5 insallé (ps la tache cron plante qu'elle soit lancée par IIS ou en local via l'invite de commande.
Apparement, le programme entre dans une boucle infinie...
Si quelqun a une idée je suis preneur. Au passage, y a-t-il des installations de Moodle sur PC windows 2000 ou 2003 avec la tâche cron qui fonctionne quelque part en france ?
cordialement