Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] script perl marche pas en cron

16 réponses
Avatar
Nicolas Roudninski
Bonjour à tous,

Je me suis fait un petit script perl qui vérifie ma boite aux lettres
et m'affiche un message (avec zenity) si un auteur choisi m'a écrit.
Le problème est que ce script fonctionne bien à partir d'une console
mais pas à partir d'une tache cron, du moins pas tout le script...
Apparemment, le script fonctionne pour ce qui est de la vérif email,
mais pas ensuite (affichage de l'info via zenity).
Ce pourrait-ce être une question de DISPLAY ?

Voici le script en question :
---------------------------debut du script-----------------------------
my $xdlg = "/usr/bin/zenity";
my $pop;
my $i;
my $nom;
my @amis;
my $amis_data;
my $email;
#chomp(my $user = `whoami`);
my $user = "nicolas";
chomp(my $home_dir = "/home/$user");

print "connection au serveur...\n";
$pop = new Mail::POP3Client( USER => "nroudninski",
PASSWORD => "YDjqCDDi",
HOST => "pop.wanadoo.fr" );

sub read_data {
open DATAFILE, "$home_dir/amis.dat"
or die "Fichier introuvable !";
while (<DATAFILE>) {
chomp;
push @amis, $_."\n";
}
for ($i = 1; $i <= $pop->Count(); $i++) {
# print @amis;
foreach my $amis (@amis) {
my @amis_data = split / *: */, $amis;
$email = $amis_data[1];
chomp($email);
$nom = $amis_data[0];
&compare;
# print $email;
}
}
close DATAFILE;
return ;
} # ---------- end of subroutine read_data ----------

sub compare {
# for ($i = 1; $i <= $pop->Count(); $i++) {
foreach ( $pop->Head( $i ) ) {
if (/From:.*$email/) {
chomp;
print "Un message de $nom [$email]\n";
# s/From://;
# print " [$_ ]\n";
my $adresse = $_;
system"$xdlg --info --text 'Un message
de $nom'"; }
}
# }
return ;
} # ---------- end of subroutine compare ----------

read_data;
----------------------------fin du script-------------------------------

--
Nicolas Roudninski
nroudninski@wanadoo.fr
----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

10 réponses

1 2
Avatar
Laurent Besson
Le dimanche 9 Juillet 2006 15:39, Nicolas Roudninski a écrit :
USER     => "nroudninski",
 PASSWORD => "YDjqCDDi",



J'espère que cela n'est pas ton vrai login !
Avatar
Nicolas Roudninski
Le Sun, 9 Jul 2006 15:51:11 +0200
Laurent Besson a écrit :

Le dimanche 9 Juillet 2006 15:39, Nicolas Roudninski a écrit :
> USER     => "nroudninski",
> PASSWORD => "YDjqCDDi",

J'espère que cela n'est pas ton vrai login !

---------------------------------------------------------------------------------------
Orange vous informe que cet e-mail a ete controle par l'anti-virus
mail. Aucun virus connu a ce jour par nos services n'a ete detecte.





euh, mince, je change ça tout de suite !!!

--
Nicolas Roudninski

----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Laurent Besson
Le dimanche 9 Juillet 2006 16:02, Nicolas Roudninski a écrit :
Le Sun, 9 Jul 2006 15:51:11 +0200

euh, mince, je change ça tout de suite !!!




Fait une demande à de ne pas archiver ce thread !
:(
Avatar
Laurent Besson
Le dimanche 9 Juillet 2006 15:39, Nicolas Roudninski a écrit :
Bonjour à tous,
my $xdlg = "/usr/bin/zenity";
my $pop;
my $i;
my $nom;
my @amis;
my $amis_data;
my $email;
#chomp(my $user = `whoami`);
my $user = "nicolas";
chomp(my $home_dir = "/home/$user");

print "connection au serveur...n";
$pop = new Mail::POP3Client( USER => "nroudninski",
PASSWORD => "YDjqCDDi",
HOST => "pop.wanadoo.fr" );

sub read_data {
open DATAFILE, "$home_dir/amis.dat"
or die "Fichier introuvable !";
while (<DATAFILE>) {
chomp;
push @amis, $_."n";
}
for ($i = 1; $i <= $pop->Count(); $i++) {
# print @amis;
foreach my $amis (@amis) {
my @amis_data = split / *: */, $amis;
$email = $amis_data[1];
chomp($email);
$nom = $amis_data[0];
&compare;
# print $email;
}
}
close DATAFILE;
return ;
} # ---------- end of subroutine read_data ----------

sub compare {
# for ($i = 1; $i <= $pop->Count(); $i++) {
foreach ( $pop->Head( $i ) ) {
if (/From:.*$email/) {
chomp;
print "Un message de $nom [$email]n";
# s/From://;
# print " [$_ ]n";
my $adresse = $_;
system"$xdlg --info --text 'Un message
de $nom'"; }
}
# }
return ;
} # ---------- end of subroutine compare ----------

read_data;
----------------------------fin du script-------------------------------



Comment dans ta console lances tu le script ?
Car chez moi il me met : Can't locate object method "new" via package
"Mail::POP3Client" (perhaps you forgot to load "Mail::POP3Client"?) at
mail.pl line 16 ...
Mais bon c'est une autre histoire !
Avatar
Gabriel Moreau
Le pb est que pour l'affichage, il faut la variable DISPLAY que ton
script n'a pas puisqu'il est lancé par cron.

Il vaut mieux dans ton cas faire un script qui boucle avec un sleep 5
dans la boucle. Le résultat est le même mais tu hérites alors de la
variable DISPLAY de ton environnement graphique.

gaby


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
On 2006-07-09 15:39:54 +0200, Nicolas Roudninski wrote:
$pop = new Mail::POP3Client( USER => "xxxxxxxxxxx",
PASSWORD => "xxxxxxxx",
HOST => "pop.wanadoo.fr" );



En général, on ne met pas ce genre de données dans les scripts,
mais dans un fichier séparé et protégé: meilleure sécurité (si
le script risque d'être diffusé), et c'est plus facilement
maintenable.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Nicolas Roudninski
Le Mon, 10 Jul 2006 03:34:29 +0200
Vincent Lefevre a écrit :

On 2006-07-09 15:39:54 +0200, Nicolas Roudninski wrote:
> $pop = new Mail::POP3Client( USER => "xxxxxxxxxxx",
> PASSWORD => "xxxxxxxx",
> HOST => "pop.wanadoo.fr" );

En général, on ne met pas ce genre de données dans les scripts,
mais dans un fichier séparé et protégé: meilleure sécurité (si
le script risque d'être diffusé), et c'est plus facilement
maintenable.



Je sais, mais je bidouillais d'un air très tistrait sur ce script, et
puis voilà, la fuite...

PS : comment "protégeré un fichier sensible avec perl ?

--
Nicolas Roudninski

----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
On 2006-07-10 11:54:06 +0200, Nicolas Roudninski wrote:
Le Mon, 10 Jul 2006 03:34:29 +0200
Vincent Lefevre a écrit :

> On 2006-07-09 15:39:54 +0200, Nicolas Roudninski wrote:
> > $pop = new Mail::POP3Client( USER => "xxxxxxxxxxx",
> > PASSWORD => "xxxxxxxx",
> > HOST => "pop.wanadoo.fr" );
>
> En général, on ne met pas ce genre de données dans les scripts,
> mais dans un fichier séparé et protégé: meilleure sécurité (si
> le script risque d'être diffusé), et c'est plus facilement
> maintenable.
>
Je sais, mais je bidouillais d'un air très tistrait sur ce script, et
puis voilà, la fuite...

PS : comment "protégeré un fichier sensible avec perl ?



C'est indépendant de Perl: tu fais un chmod 600 sur le fichier,
de manière à ce qu'il soit lisible uniquement par toi. Le script
Perl peut être public.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Nicolas Roudninski
Le Sun, 9 Jul 2006 17:36:21 +0200
Laurent Besson a écrit :

Le dimanche 9 Juillet 2006 15:39, Nicolas Roudninski a écrit :
> Bonjour à tous,
> my $xdlg = "/usr/bin/zenity";
> my $pop;
> my $i;
> my $nom;
> my @amis;
> my $amis_data;
> my $email;
> #chomp(my $user = `whoami`);
> my $user = "nicolas";
> chomp(my $home_dir = "/home/$user");
>
> print "connection au serveur...n";
> $pop = new Mail::POP3Client( USER => "XXXXXXXXXXXXXXX",
> PASSWORD => "XXXXXXXX",
> HOST => "pop.wanadoo.fr" );
>
> sub read_data {
> open DATAFILE, "$home_dir/amis.dat"
> or die "Fichier introuvable !";
> while (<DATAFILE>) {
> chomp;
> push @amis, $_."n";
> }
> for ($i = 1; $i <= $pop->Count(); $i++) {
> # print @amis;
> foreach my $amis (@amis) {
> my @amis_data = split / *: */, $amis;
> $email = $amis_data[1];
> chomp($email);
> $nom = $amis_data[0];
> &compare;
> # print $email;
> }
> }
> close DATAFILE;
> return ;
> } # ---------- end of subroutine read_data ----------
>
> sub compare {
> # for ($i = 1; $i <= $pop->Count(); $i++) {
> foreach ( $pop->Head( $i ) ) {
> if (/From:.*$email/) {
> chomp;
> print "Un message de $nom
> [$email]n"; # s/From://;
> # print " [$_ ]n";
> my $adresse = $_;
> system"$xdlg --info --text 'Un
> message de $nom'"; }
> }
> # }
> return ;
> } # ---------- end of subroutine compare ----------
>
> read_data;
> ----------------------------fin du
> script-------------------------------
>
Comment dans ta console lances tu le script ?
Car chez moi il me met : Can't locate object method "new" via package
"Mail::POP3Client" (perhaps you forgot to load "Mail::POP3Client"?)
at mail.pl line 16 ...
Mais bon c'est une autre histoire !



Il manquait les premières lignes :
use strict;
use warnings;
use Mail::POP3Client;

--
Nicolas Roudninski

----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Nicolas Roudninski
Le Sun, 09 Jul 2006 17:44:44 +0200
Gabriel Moreau a écrit :

Le pb est que pour l'affichage, il faut la variable DISPLAY que ton
script n'a pas puisqu'il est lancé par cron.

Il vaut mieux dans ton cas faire un script qui boucle avec un sleep 5
dans la boucle. Le résultat est le même mais tu hérites alors de la
variable DISPLAY de ton environnement graphique.

gaby




Merci, c'est ce que j'ai fait et ça marche (sleep 180). Mais ça doit
prendre plus de mémoire et de temps processeur que cron, non ? (même si
dans ce cas précis cela doit être négligeable). Il doit bien y avoir un
moyen de faire faire cette tache a cron...

--
Nicolas Roudninski

----------------------
Toute ressemblance avec des fautes d'orthographe, de grammaire
ou de conjugaison existantes ou ayant existé serait entièrement
fortuite et indépendante de la volonté de l'auteur.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
1 2