CRON sous Unix

sandrill0n -  
 fozzie -
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)
Y a-t-il une autre commande à faire que "crontab cronfile" ? (cronfile est le nom de mon fichier CRON)

Merci

16 réponses

Satrialien Messages postés 52 Statut Membre 13
 
Bonjour,

normalement la commande cron cronfile charge le fichier dans la crontab. Peux-tu copier-coller le contenu de ta crontab ?
0
sandrill0n Messages postés 81 Statut Membre
 
Salut,

Voici un extrait de mon fichier cron :

10 07 * * 1,2,3,4,5 /export/home/kthmgr/crondir/pareto_wl 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/pareto_wl 1 /var/opt/applications/mo/Report/sm2.5

je le répète 7 fois.

Par contre j'ai tenté "cron cronfile" et j'ai un super message d'erreur :
! you are not authorized to use cron. Sorry. Mon May 2 17:41:32 2005
! ******* CRON ABORTED ******** Mon May 2 17:41:32 2005

Avant je faisais "crontab cronfile", c'est peut-être pour ça que ça ne marche pas....
Mais comment faire pour être autorisée à l'utiliser ?

Merci
0
Satrialien Messages postés 52 Statut Membre 13
 
désolé je me suis gouré dans mon post, je parlais bien de la commande "crontab cronfile" qui est correcte...
0
Satrialien Messages postés 52 Statut Membre 13
 
à priori je vois pas de truc qui cloche, mais je suis pas un gd spécialiste de la crontab...

tu dis que tu reçois tes mails, c'est donc uniquement ta ligne
10 07 * * 1,2,3,4,5 /export/home/kthmgr/crondir/pareto_wl 1 /var/opt/applications/mo/Report/sm3.0 
qui génère les 2 fichiers qui ne fonctionne pas.
Tu es sure du fonctionnement de "pareto_wl" ? il fonctionne sans le lancer depuis cron ?
si oui essaies d'ajouter des traces et de les rediriger depuis cron vers un fichier, histoire de voir si le programme tourne correctement et s'il y a pas un pbm de droits. Tu es sûre que le user qui génère les 2 fichiers a les bons droits ?
0
sandrill0n Messages postés 81 Statut Membre
 
je crois que c'est ça mon problème mais je ne sais pas comment lui donner les droits....
j'ai trouvé le fichier où il faut les rentrer, mais après c'est le flou total !
0

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

Posez votre question
Satrialien Messages postés 52 Statut Membre 13
 
normalement chaque utilisateur Unix dispose de son propre ordonnancement cron. L'utilisateur avec lequel tu as lancé la commande 'crontab cronfile' doit avoir les droits d'exécuter le programme et aussi doit avoir les droits d'écriture dans les répertoires où vont être créés tes fichiers par le programme. Déja fais ce test : connectes toi avec l'utilisateur de ta crontab et lances ton programme. Regardes s'il tourne correctement et si tes fichiers sont bien générés. Si c'est le cas, ça ne devrait pas poser de problème sous cron.
Tu disais dans ton premier que tu avais généré les fichiers manuellement : c'est donc que ton programme fonctionne à priori. Qd tu as fait cette génération manuelle, tu as utilisé le même utilisateur que celui qui charge ton cron ?
0
sandrill0n Messages postés 81 Statut Membre
 
Je fais tout avec le même utilisateur.
Le programme marche très bien seul (hors du cron).
Ca a encore planté ce matin.... obligé de tout faire à la main...
Là je comprends plus
0
Satrialien Messages postés 52 Statut Membre 13
 
tu as mis des traces dans ton programme ? mets des traces aux endroits critiques et retestes-le depuis ton cron, tu verras mieux où il plante
0
sandrill0n Messages postés 81 Statut Membre > Satrialien Messages postés 52 Statut Membre
 
Ca ne marche pas plus....
Je n'ai aucune sortie depuis le cron (à part le mail)
Je ne comprends pas pourquoi le programme ne s'exécute pas
0
Satrialien Messages postés 52 Statut Membre 13 > Satrialien Messages postés 52 Statut Membre
 
même si tu fais un echo dans la première ligne de ton programme, tu n'as pas la sortie ?
0
sandrill0n Messages postés 81 Statut Membre
 
voici la sortie que j'ai :
ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory

qu'est-ce que ça veut dire ?
0
Satrialien Messages postés 52 Statut Membre 13
 
ton programme doit utiliser la librairie "libKI_DEBUG.so" qu'il n'arrive pas à trouver. Comme ton pgm fonctionne en manuel, c'est un pbml de droit qui fait qui fait que, lancé depuis le cron, cette librairie est inatteignable par l'utilisateur qui lance le pgm...
Tu as un accès root sur la machine ? si oui essaie de charger ce programme dans la crontab de root, et regardes ce que donne l'exécution. Si ça passe ça confirmera le pbm de droits, puisque root a normalement accès à tout.
0
sandrill0n Messages postés 81 Statut Membre
 
pour l'accès root je sais pas...
je sais que mon utilisateur est l'équivalent de l'administrateur

Impossible de trouver libKI_DEBUG.so dans les dossiers

Où est-ce que je peus le trouver ?

Par contre j'ai trouvé le crontab pour root, j'y fais quoi dessus ?
0
Satrialien Messages postés 52 Statut Membre 13
 
bah en fait tu te connectes en root, tu charges ton fichier dans cron en faisant
crontab cronfile
en positionnant la date d'exécution proche. Qd le pgm aura tourné, tu verras s'il fait une sortie correcte et génère les 2 fichiers.
0
sandrill0n Messages postés 81 Statut Membre
 
en fait j'ai pas d'accès root.
j'ai pas le password (et comme je suis stagiaire je ne l'aurai jamais)
donc je suis bien dans la m...

t'as pas une autre solution ?

j'ai regardé dans l'environnement : le chemein pour accéder à libKI_DEBUG.so est présent dans LD_LIBRARY_PATH
0
Satrialien Messages postés 52 Statut Membre 13
 
tu peux faire un test qd même : ton pgm
/export/home/kthmgr/crondir/pareto_wl
, c'est un script shell ? si c'est le cas rajoutes en première ligne un
echo $LD_LIBRARY_PATH
, ça te permettra de savoir si ta variable est bien positionnée pour ton programme. En effet qd tu lances ton programme manuellement, cette variable d'environnement est probablement déjà chargée (si elle est dans ton .profile par exemple), mais je pense que pour un lancement depuis cron, ton pgm ne connait pas cette variable.
Fais ce test, comme ça on verra si ta variable est bien déclarée. Si ce n'est pas le cas, tu pourras la déclarer dans ton pgm :
LD_LIBRARY_PATH=...
export $LD_LIBRARY_PATH
ça fonctionnera.
Si le pgm "pareto_wl" que tu lances n'est pas un script shell alors il faudra créer un script qui le lancera, et ta crontab appelera ce script.
0
sandrill0n Messages postés 81 Statut Membre
 
J'ai lancé mon pgm, puis fait "echo $LD_LIBRARY_PATH", voici ce que j'ai :
"/usr/openwin/lib:/usr/openwin/lib/X11:/usr/lib:/lib:/opt/applications/ki/openint/shr:/opt/applications/ki/lib:/opt/applications/ki/usrlib"

Les bons chemins sont utilisés.

Par contre mon programme est en C, et je ne suis pas très douée en programmation pour faire le script toute seule....
0
Satrialien Messages postés 52 Statut Membre 13
 
qd tu dis que tu as lancé ton pgm, tu veux dire que tu l'as lancé manuellement ? si c'est le cas c'est normal que ton LD_LIBRARY_PATH soit bien positionné.
Pour le shell, tu crées un fichier "pareto.ksh" dans le répertoire où se trouve ton programme C que tu lances. Ce fichier "pareto.ksh" peut contenir par exemple :

#!/bin/ksh

echo Lancement du traitement
echo $LD_LIBRARY_PATH

#insères ici la ligne de commande que tu tapes d'habitude pour lancer ton pgm C manuellement

echo Fin du traitement



n'oublies pas de faire un
chmod +x pareto.ksh
pour le rendre exécutable.
Ensuite, testes d'abord le fonctionnement en lançant le shell manuellement. Si ça fonctionne pas, dis moi quelles sont les erreurs. Si ça fonctionne, modifies ensuite ta crontab afin de ne plus lancer ton pgm C mais ton shell à la place.
0
sandrill0n Messages postés 81 Statut Membre
 
le script marche manuellement mais pas dans le cron...
Je n'ai que le début et la fin :
Lancement du traitement

Fin du traitement

il exécute le shell mais pas les lignes de commande à 'intèrieur...
bizarre....
0
Satrialien Messages postés 52 Statut Membre 13
 
et le 'echo $LD_LIBRARY_PATH' est-ce qu'il s'affiche ?

tu peux remplacer la ligne par :
echo Valeur de lib_path $LD_LIBRARY_PATH


ça permettre de voir si la variable est vide ou pas (sinon ça affiche un eligne vide, donc rien)
0
sandrill0n Messages postés 81 Statut Membre > Satrialien Messages postés 52 Statut Membre
 
toujours ligne vide....

et si je fais ça (sans le script shell) :

#!/bin/ksh

10 16 * * 1,2,3,4,5 /bin/ksh -q /export/home/kthmgr/crondir/pareto_wl 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt

ça marche ou pas ? (pas sure pour le -q)
0
Satrialien Messages postés 52 Statut Membre 13 > Satrialien Messages postés 52 Statut Membre
 
ça devrait marcher je crois, essaies et regardes si tu retrouves bien les messages dans le fichier de traces
0
sandrill0n Messages postés 81 Statut Membre > Satrialien Messages postés 52 Statut Membre
 
J'ai fait ça :

#!/bin/ksh
10 13 * * 1,2,3,4,5 /bin/ksh -p /export/home/kthmgr/crondir/paretoe 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt

et voici le résultat :

/bin/ksh: /export/home/kthmgr/crondir/paretoe: cannot execute

là je ne comprends plus !
0
Satrialien Messages postés 52 Statut Membre 13 > Satrialien Messages postés 52 Statut Membre
 
quels sont les droits de ce script ?
0
sandrill0n Messages postés 81 Statut Membre
 
droits de paretoe : -rwxrwxr-x
droits de cronfile : -rwxr-xr-x
0
Satrialien Messages postés 52 Statut Membre 13
 
essaies en mettant :

10 13 * * 1,2,3,4,5 /export/home/kthmgr/crondir/paretoe 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt 


dans ton cronfile
0
sandrill0n Messages postés 81 Statut Membre
 
On a la même erreur qu'au début :

ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory

voilà, voilà...
0
sandrill0n Messages postés 81 Statut Membre
 
si je rajoute :
#include <stdlib.h>

dans mon programme en C, ça ne marche pas mieux...

et avec
/bin/ksh
le programme n'est pas exécuté

En fait, dans les deux cas le programme n'est pas exécuté
0
sandrill0n Messages postés 81 Statut Membre
 
J'ai comme tu m'avais dit au début, avec le script :
#!/bin/ksh

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

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

echo Fin du traitement


et j'ai ça comme sortie :
ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory
/export/home/kthmgr/crondir/parsm30.ksh[7]: 13602 Killed

Lancement du traitement

Valeur de lib_path
Fin du traitement


Bien sûr le programme ne s'exécute pas...
Qu'en penses-tu ?
0
sandrill0n Messages postés 81 Statut Membre
 
Je ne m'en sors plus de mon problème de CRON...
En plus, j'ai la pression pour le régler rapidement...

Please, aidez moi...
0
fozzie
 
Je connais ce forum que depuis hier,
je n'avais pas vu que ce sujet était déjà ouvert.

à vérifier :
------------
QUEL SHELL UTILISES TU ?
commande "ps"
tu verras des "bash" ou "ksh" ou "csh" ou "sh" ...
les variables d'environnement sont positionnées en fonction de ça et du compte utilisateur.

si tu es en bash, pour prendre en compte tes variables d'environnement, il faut remplacer le début du shell par :
#!/bin/bash

SOUS QUEL COMPTE EST LANCE LE CRON ?
si tu lance la commande "crontab" de ton compte, pas de problèmes

si ça ne marche pas :
------------------------
tu as la solution dans le shell "pareto.bash"
chmod +x pareto.bash

contenu du shell
==========
#!/bin/bash

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

export LD_LIBRARY_PATH

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

Et lancer ce shell par crontab
contenu du cronfile :
=============
10 07 * * 1,2,3,4,5 /.../.../pareto.bash

#/.../... : remplacer par le chemin où se trouve le shell
0