[CRON] problème d'exécution
Résolu
sandrill0n
Messages postés
81
Statut
Membre
-
sandrill0n Messages postés 81 Statut Membre -
sandrill0n Messages postés 81 Statut Membre -
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 :
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 :
qu'est-ce que ça veut dire ?
Merci
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
A voir également:
- [CRON] problème d'exécution
- Z-cron - Télécharger - Optimisation
- Le service spouleur d'impression local n'est pas en cours d'exécution - Guide
- Cron toutes les minutes ✓ - Forum Shell
- Processus d'execution client serveur - Forum Windows 10
- Il permet l’exécution des logiciels applicatifs et gère l’utilisation des ressources matérielles (mémoire, processeur, périphériques). - Forum Pilotes (drivers)
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).
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).
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 ;-))
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 ;-))
Ben oui mais ça marce pas et je pensais que c'était le meilleur forum...
Bon j'ai essayé avec le Shell :
Et ça ne marche pas mieux....
Résultat fichier d'erreur :
Résultat du ficheir de sortie clasique :
Donc n'exécute pas le programme en C
Y a autre chose à mettre dans les shell ?
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 ?
du coup j'ai répondu à la suite de ce lien :
http://www.commentcamarche.net/forum/affich-1487713-CRON-sous-Unix
http://www.commentcamarche.net/forum/affich-1487713-CRON-sous-Unix
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
#!/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
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
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
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
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
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.
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.
Voici ce que j'ai fait :
Dans le cronfile :
Dans le shell :
Résultat du fichier d'erreur :
Je vais essayer : /usr/bin/csh/ -c ....
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 ....
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
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
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
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
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 ...
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 ...
J'ai essayé plusieurs trucs, ça ne marche pas plus....
Avec ksh, ça marche manuellement mais pas dans le cron :
Avec csh, ça marche pas trop (tests en manuel, pas dans le cron)...
Message d'erreur : Variable syntax
Avec ton autre solution :
Message d'erreur :
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
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)
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)
J'ai fait ça dans le shell :
Quand je le lance manuellement, rien ne se passe... le programme n'est pas exécuté, pas de message d'erreur...
#!/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...
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)
#!/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)
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
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
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.
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.
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
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
Et bien voilà l'erreur !!!
dans la variable (à la fin), tu as
/opt/applications/opt/usrlib
au lieu de
/opt/applications/ki/usrlib
dans la variable (à la fin), tu as
/opt/applications/opt/usrlib
au lieu de
/opt/applications/ki/usrlib
ça marche !!!!!
merci
Par contre, il faut que je fasse autant de fichiers parx.csh que j'ai de répertoires à scruter ?
merci
Par contre, il faut que je fasse autant de fichiers parx.csh que j'ai de répertoires à scruter ?
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
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