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

Différence entre xterm et cron.

4 réponses
Avatar
Ted
Bonjour,

j'ai écrit un petit script en Perl qui permet de lancer plusieurs
snmpget sur un routeur puis d'inserer le résultat dans une base de
données mysql, et d'envoyer un mail selon la valeur du résultat. OK.
Tout fonctionne bien. Pour automatiser la tâche, j'utilise cron. Mais ca
ne marche pas.
exemple : crontab : 5,10 * * * * perl checkLink.pl
Le démon crond lance bien la commande "perl checkLink.pl" : OK
Mais j'ai l'impression que mes variables ne s'initialisent pas
correctement. Mon programme ne se comporte pas de la même manière que si
je le lancais dans un xterm en ligne de commande qu'à partir du démon cron.
Avez vous déjà eu ce problème ?

merci

4 réponses

Avatar
dominix
Ted wrote:
Bonjour,

j'ai écrit un petit script en Perl
...

Pour automatiser la tâche, j'utilise cron. Mais ca ne marche pas.
...

Avez vous déjà eu ce problème ?



oui

il y avait un bug a la ligne 37*



*(C) fr.comp.lang.perl ?

Avatar
Alex Marandon
On 2004-01-09, Ted wrote:
correctement. Mon programme ne se comporte pas de la même manière que si
je le lancais dans un xterm en ligne de commande qu'à partir du démon cron.
Avez vous déjà eu ce problème ?


Difficile à dire si tu n'indique pas plus précisément les erreurs, mais
il faut peut être voir du côté de l'environnement (%ENV).

Avatar
Jérémy JUST
On Thu, 08 Jan 2004 16:18:22 -1000
Ted wrote:

exemple : crontab : 5,10 * * * * perl checkLink.pl
Le démon crond lance bien la commande "perl checkLink.pl" : OK
Mais j'ai l'impression que mes variables ne s'initialisent pas
correctement.


Dans cron comme en interactif, tu as tout intérêt à regarder les
erreurs, qui ont dû t'être envoyées par mail. Il y a peu de devins ici.

Un problème courant est $PERLLIB, qui n'est pas définie par cron (alors
qu'elle l'est peut-être dans ton shell courant). Pour corriger ça, le plus
simple est soit de passer une option `-I dir' à perl, soit de coder en dur
la valeur de @INC dans le programme.
Si ce n'est pas cette variable, hé bien il te reste à passer tout %ENV
en revue...

--
Jérémy JUST

Avatar
Terrot Francois
Jérémy JUST écrivait
news::

On Thu, 08 Jan 2004 16:18:22 -1000
Ted wrote:

exemple : crontab : 5,10 * * * * perl checkLink.pl
Le démon crond lance bien la commande "perl checkLink.pl" : OK
Mais j'ai l'impression que mes variables ne s'initialisent pas
correctement.


Dans cron comme en interactif, tu as tout intérêt à regarder les
erreurs, qui ont dû t'être envoyées par mail. Il y a peu de devins
ici.

Un problème courant est $PERLLIB, qui n'est pas définie par cron
(alors
qu'elle l'est peut-être dans ton shell courant). Pour corriger ça, le
plus simple est soit de passer une option `-I dir' à perl, soit de
coder en dur la valeur de @INC dans le programme.
Si ce n'est pas cette variable, hé bien il te reste à passer tout
%ENV
en revue...



Je confirme le fait que cron (cf man cron) utilise un environnemnt
restreint sous sh en général. Il n'y a quasiment aucune variable
d'environnemnt de définie, à part le strict minimum vital ... bref %ENV
sera vide ou presque ...

Si ton script envoie des messages sur la sortie standard (stdout) ou la
sortie d'erreur (stderr) cron devrait les avoir envoyer par un mail a
l'utilisateur (si toutefois le mail fonctionne!). La solution pour
récupérer ces messages de sortie de cron est de rediriger les sorties vers
des fichiers, ce qui pourrait donner :

5,10 * * * * perl checkLink.pl 1>checkLink.out 2>checkLink.err