[CRON] problème d'exécution

Résolu/Fermé
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011 - 12 mai 2005 à 13:37
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011 - 13 mai 2005 à 17:02
Bonjour,

Je suis en stage de fin d'études et je "découvre" Unix.
J'ai un petit problème pour lancer un programme automatiquement.
Dans mon cronfile : à 7h10 je lance un programme qui génère 2 fichiers (par.txt et par.log), à 7h20 j'envoie un mail avec par.txt comme corps du mail, à 7h25 j'envoie un mail avec par.log comme corps du mail.
Mon problème est que le programme n'est pas exécuté, mais je reçois les deux mails avec les résulats de la veille (que j'ai fait manuellement)

Voici un extrait de mon fichier cron :
10 07 * * 1,2,3,4,5 /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 
20 07 * * 1,2,3,4,5 /usr/ucb/mail -s 'Pareto des Wafers PC Gate sm3.0 du jour' sandra < /export/home/kthmgr/crondir/pareto.txt 
25 07 * * 1,2,3,4,5 /usr/ucb/mail -s 'Log pareto PC Gate sm3.0' sandra < /export/home/kthmgr/crondir/pareto.log 
30 07 * * 1,2,3,4,5 /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm2.5 


je le répète 7 fois.
J l'ai initialisé en faisant crontab cronfile (nom de mon fichier)

J'ai mis des traces et voici le résultat du fichier d'erreur :
ld.so.1: /export/home/kthmgr/crondir/paretolot: fatal: libKI_DEBUG.so: open failed: No such file or directory 


qu'est-ce que ça veut dire ?

Merci

22 réponses

ça veut tout simplement dire que ton programme "/export/home/kthmgr/crondir/paretolot" plante au lancement.
Donc il ne crée pas les fichiers.
La raison du tilt : il ne trouve pas une librairie dynamique (utilisée pas ton programme compilé en mode DEBUG).
L'environnement d'exécution du cron est sans doute différent de celui de ton compte.
Vérifies, tu postitionnes peut-être dans ton compte des variables d'environnement (.bashrc par exemple).
Le fichier .bashrc n'est pas pris en compte par le cron.
Il y a une solution simple à tester :
créer un shell qui lance le programme et faire exécuter le shell par le cron. (tu peux positionner les variables d'environnement que tu veux dans le shell).
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 mai 2005 à 15:42
Salut,

Avant que tout le monde ne se lance dans des explications, paramétrages et manips de toutes sortes, il serait bon d'aller jeter un oail à tout ce qui a déjà été tenté...
http://www.commentcamarche.net/forum/affich-1487713-CRON-sous-Unix

Et oui "Cinderella", t'aurais pu en causer, ça fait gangner du temps ;-))
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
12 mai 2005 à 16:05
Ben oui mais ça marce pas et je pensais que c'était le meilleur forum...

Bon j'ai essayé avec le Shell :
#!/bin/ksh

echo Lancement du traitement
echo $LD_LIBRARY_PATH
echo Valeur de lib_path $LD_LIBRARY_PATH

/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm5ap

echo Fin du traitement


Et ça ne marche pas mieux....
Résultat fichier d'erreur :
ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory
/export/home/kthmgr/crondir/pareto.ksh[7]: 13677 Killed

Résultat du ficheir de sortie clasique :
Lancement du traitement

Valeur de lib_path
Fin du traitement


Donc n'exécute pas le programme en C

Y a autre chose à mettre dans les shell ?
0
du coup j'ai répondu à la suite de ce lien :
http://www.commentcamarche.net/forum/affich-1487713-CRON-sous-Unix
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
12 mai 2005 à 16:51
J'ai fait un "ps" :
 PID TT       S  TIME COMMAND
 28858 pts/25   S  0:00 -csh
 28923 pts/25   S  0:28 xemacs
 27381 pts/26   S  0:00 -csh


Apparement c'est un shell "csh"

J'essaie de faire un shell "pareto.csh"
0
Attention, en csh, la syntaxe est différente :

#!/bin/csh

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib

(ou source /.../.../.cshrc)

/export/home/kthmgr/crondir/pareto_wl /var/opt/applications/mo/Report/sm3.0



ou alors, tu repars de ton premier crontab, et tu rajoutes "csh" devant /export/home/kthmgr/crondir/pareto_wl
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
12 mai 2005 à 17:05
en faisant juste :

csh /export/home/kthmgr/crondir/pareto_wl /var/opt/applications/mo/Report/sm3.0

je rajoute #!/bin/csh au début ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dans le fichier cronfile :

plutôt :
/bin/csh /export/home/kthmgr/crondir/pareto_wl /var/opt/applications/mo/Report/sm3.0

fais attention aux paramètres, il manque peut-être un 1 :
/bin/csh /export/home/kthmgr/crondir/pareto_wl
1 /var/opt/applications/mo/Report/sm3.0

pour être sûr, tu fais :
which csh
si la réponse est /bin/csh, tu mets ça, sinon, tu mets le résultat


#!/bin/csh (ou autre) : tu le rajoutes uniquement dans tes shells, pas dans le cronfile
0
je m'aperçois que je n'ai peut-être pas été clair :

dans le cronfile :

10 07 * * 1,2,3,4,5 /bin/csh /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 09:20
J'ai fait ça :
10 09 * * 1,2,3,4,5     /usr/bin/csh /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt


Résultat de fichier d'erreur :
Variable syntax


Comprends pas...
0
tout d'abord, désollé, je n'ai pas de machine pour tester,
sinon j'aurais essayé les commandes que je te propose.
(je fais de mémoire)

récap :
la variable qui te pose problème est positionnée en csh.
le cron fonctionne en sh, il faut donc passer par un csh,
soit directement par le cron.

d'autre part, un coup il y a paretolot, une autre fois pareto_wl,
donc réctifies le nom si je ne mets pas le bon.

Par le cron :
--------------
peut-être avec l'option -c

10 09 * * 1,2,3,4,5 /usr/bin/csh -c /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt

soit en passant par un csh :
-------------------------------
10 09 * * 1,2,3,4,5 /.../.../pareto.csh


le fichier pareto.csh (chmod +x) peut être :
#!/bin/csh

#positonnement de la variable d'environnement
#mais normalement il n'y a pas besoin de cette ligne
#================================
setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib

#ta commande (vérifier la syntaxe)
#======================
/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt



la première solution, je ne sais pas,
mais la deuxième soultion doit fonctionner.
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 10:36
Voici ce que j'ai fait :

Dans le cronfile :
40 10 * * 1,2,3,4,5	/export/home/kthmgr/crondir/parsm5ap.csh 2> /export/home/kthmgr/crondir/essai.txt


Dans le shell :
#!/bin/csh
setenv LD_LIBRARY_PATH
$LD_LIBRARY_PATH:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib

/export/home/kthmgr/crondir/paretoe 1 /var/opt/applications/mo/Report/sm5ap


Résultat du fichier d'erreur :
Variable syntax


Je vais essayer : /usr/bin/csh/ -c ....
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 10:53
A y est...

J'ai essayé : 10 09 * * 1,2,3,4,5 /usr/bin/csh -c /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt

Résultat : Killed

Là je crois que j'ai un gros souci...
0
il y a une erreur de syntaxe dans le shell apparament,
essayes le shell seul comme ça :

/export/home/kthmgr/crondir/parsm5ap.csh


je me suis peut-être planté dans la syntaxe du setenv
pour le shell,
tu peux essayer avec juste la commande (en supprimant la ligne setenv ...)

aussi,
ls /bin/csh
vérifies que ce fichier existe,
sinon,
#!/usr/bin/csh
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 11:08
le shell seul marche (avec les modifs) ....

je retente dans le cron
0
pourtant, ça doit rester simple :

pour le cron, passes par le shell parsm5ap.csh :
------------------------------------------------------
10 11 * * * /export/home/kthmgr/crondir/parsm5ap.csh >
/export/home/kthmgr/crondir/essai.txt


pour le shell parsm5ap.csh (droits +x) :
--------------------------------------------
#!/usr/bin/csh (ou #!/bin/csh si le fichier existe)
"ton programme" > /export/home/kthmgr/crondir/essai2.txt


dans essai.txt : les traces du shell (pour les erreurs de syntaxe par exemple)
dans essai2.txt : les traces de ton programme


ne te laisse pas impressionner par le message d'erreur Killed
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 11:36
J'ai retenté le shell dans le cron !

Résultat du message d'erreur :
ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory


Je crois que je ne pourrai pas m'en sortir de cette librairie !
0
il faut donc rajouter setenv ... avant ta commande :

il faut trouver l'erreur de syntaxe dans le shell avec le setenv :
peut-être avec des " "

setenv LD_LIBRARY_PATH "/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib"


et tester encore et encore ...
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 13:27
J'ai essayé plusieurs trucs, ça ne marche pas plus....

Avec ksh, ça marche manuellement mais pas dans le cron :
#!/usr/bin/ksh


echo Lancement du traitement
echo Valeur de lib_path $LD_LIBRARY_PATH

/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0

echo Fin du traitement


Avec csh, ça marche pas trop (tests en manuel, pas dans le cron)...
#!/usr/bin/csh

setenv $LD_LIBRARY_PATH
$LD_LIBRARY_PATH:"/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib"

/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0

Message d'erreur : Variable syntax

Avec ton autre solution :
setenv LD_LIBRARY_PATH 
"/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib"


Message d'erreur :
/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib: Command not found
0
pour la 1ère, ça ne peut pas marcher, 2 erreurs de syntaxe : le 1er $ est en trop et les "" sont mal placés ...

pour la 2ème, tout doit être sur la même ligne (pas facile de le montrer avec le forum) :

setenv LD_LIBRARY_PATH
"/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib"

et puis je ne sais pas si /bin/csh existe sur ta machine,
si oui, il faut #!/bin/csh
au début du shell (setenv est une commande spécifique "csh", ça ne marche que si le shell a trouvé /bin/csh ou /usr/bin/csh)
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 13:49
J'ai fait ça dans le shell :
#!/usr/bin/csh


setenv LD_LIBRARY_PATH "/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib"

/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 > /export/home/kthmgr/crondir/essai2.txt


Quand je le lance manuellement, rien ne se passe... le programme n'est pas exécuté, pas de message d'erreur...
0
on va mettre des traes :

#!/usr/bin/csh

setenv LD_LIBRARY_PATH "/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib"

echo valeur de LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH

echo lancement de la commande

/export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0

echo fin de la commande


(supprimer : > /export/home/kthmgr/crondir/essai2.txt)
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 13:59
Résultat :

Valeur de LD_LIBRARY_PATH
/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/opt/usrlib
lancement commande
ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory
Killed
0
on est sur une fausse piste depuis le début alors.

peux-tu faire :

find / -name libKI_DEBUG.so -print

tu auras sûrement des messages d'erreurs si tu n'es pas root, pour tous les répertoires où tu ne peux pas aller

(sinon : find /opt -name libKI_DEBUG.so -print)

il faut absolument savoir où se trouve cette librairie.
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 14:15
Résultat de "find /opt -name libKI_DEBUG.so -print" (car le résultat de l'autre est trop long...)

find: cannot read dir /opt/lost+found: Permission denied
/opt/applications/ki/usrlib/libKI_DEBUG.so
find: cannot read dir /opt/applications/mo/Prober/saved/: Permission denied
0
Et bien voilà l'erreur !!!

dans la variable (à la fin), tu as
/opt/applications/opt/usrlib
au lieu de
/opt/applications/ki/usrlib
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 14:36
ça marche !!!!!

merci

Par contre, il faut que je fasse autant de fichiers parx.csh que j'ai de répertoires à scruter ?
0
je ne suis pas sûr d'avoir compris ta question.

si ça répond à ta question,

tu peux mettre autant de commandes que tu veux, à la suite, dans ton fichier parx.csh
elles seront exécutées les unes après les autres.

si tu veux des exécutions à des heures différentes,
il faut un fichier pour chaque exécutition (appelé par le cron).
on pourrait utiliser le même avec des paramètres,
mais là, on repart sur une longue discussion
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 14:47
t'as répondu à ma question qui n'était pas très claire...

par contre, pour la réussite du shell, je vais attendre un peu avant de crier victoire...
je vais le laisser tourner pendant 1 heure pour voir
0
ok, alors bon courage,
moi je pars en vacances
0
sandrill0n Messages postés 79 Date d'inscription lundi 2 mai 2005 Statut Membre Dernière intervention 22 octobre 2011
13 mai 2005 à 15:14
bon ben j'ai crié victoire trop vite !

le programme ne se lance pas !
0