Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Arrêt aléatoire de scripts perl
Envoyé par: nicolas1980

Bonjour,

tout d'abord mon environnement : Fedora 6 - Perl 5.8.8

Toutes les nuits, j'execute via cron un script bash pour envoyer une newsletter aux inscrits de mon site (environ 100 000).
Ce script démarre 20 scripts en perl ainsi :
perl -w envoi-newsletter.pl --from 0 --length 5000 > /home/log/"$d1"/"$d2"/envoi-newsletter_"$datetime"_01.log 2>/home/log/"$d1"/"$d2"/error_envoi-newsletter_"$datetime"_01.log &

je fais varier les valeurs from et length correspondant à un Limit X,Y en MySQL

Jusque là tout va bien.
Les 20 commandes perl sont executées, chacune pour une série de mail. Or, et cela de façon aléatoire, sur les 20 scripts en tache de fond, certains se termine proprement (c'est à dire bouclent sur les 5000 adresses mails), mais d'autre s'arrêtent, sans dire pourquoi.

J'ai pourtant tout un tas de messages de suivi d'execution en stdout, me permettant de vérifier le bon déroulement de mes scripts. Mais lorsque l'un des processus s'arrete, je n'ai aucune erreur ; même dans /var/log...

L'envoi prend 1h30 au total. Sur les 20 scripts perl, environ 12 arrivent au bout, les autres se stoppent de temps à autre, mais pas en même temps.

Comment un processus peut-il s'arreter sans rien dire ? Alors même que cette même commande, le jour d'avant avait très bien marché (et là, c'était un autre script qui se stoppait).

Si vous avez une idée, je suis preneur.

Merci !




Poste le Friday 13 April 2007 12:06:38
Répondre     Citer    
Re: Arrêt aléatoire de scripts perl
Envoyé par: oudoubah

Cela me fait passer à un problème suite à des accès concurrents.
Il faudrait voir un peu plus en détail le programme perl.

Comment chaque script lit les adresses chez qui il doit envoyer le mail?

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Friday 13 April 2007 13:53:13
Répondre     Citer    
Re: Arrêt aléatoire de scripts perl
Envoyé par: nicolas1980

Bonjour,

merci pour la réponse !

Alors c'est simple : j'utilise DBI pour faire ma requete MySQL. Puis je lis les résultats via une boucle while et une fonction adequat :
while (my $ref = $sth->fetchrow_hashref()) {

Puis, à chaque passage de la boucle, après verification de la validité du mail, j'utilise les fonctions de MIME::Lite pour l'envoyer via une connexion permanente en SMTP :

my $mime = MIME::Lite->new(
From       => 'XXXX <XXXXX@XXXX.XX>',
To         => $ref->{'email'},
"Reply-To" => 'XXXXX@XXXX.XX',
Subject    => 'Newsletter',
Type       => 'multipart/mixed');

# Attachement de la première partie MIME, le texte du message
$mime->attach(
Type       => 'text/html; charset="ISO-8859-1"',
Encoding   => '8bit',
Data       => $body);

if (Email::Valid->address($ref->{'email'})) {
$smtp->mail('XXXXX@XXXX.XX')
  or die "Problème avec la commande MAIL From\n";
$smtp->to($ref->{'email'}) 
  or die "Problème avec la commande RCPT TO $ref->{'email'}\n";
$smtp->data() 
  or die "Problème avec la commande DATA\n";
$smtp->datasend($mime->as_string())
  or die "Problème d'envoi de message\n";
$smtp->dataend()
  or die "Problème avec la fin d'envoi de message\n";

printf "mail envoye a %s\n ",$ref->{'email'};

voilà
merci encore pour cette aide précieuse smiling smiley

Poste le Friday 13 April 2007 15:14:56
Répondre     Citer    
Re: Arrêt aléatoire de scripts perl
Envoyé par: nicolas1980

Résolu : problème de gestion des die dans une boucle while....

merci quand même !

Poste le Friday 13 April 2007 17:26:57
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Arrêt aléatoire de scripts perl
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons