Posez votre question Signaler

CRON sous Unix

sandrill0n - Dernière réponse le 12 mai 2005 à 16:22
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
Lire la suite 

CRON sous Unix »

Suggestions
31 réponses
Réponse
+0
moins plus
Bonjour,

normalement la commande cron cronfile charge le fichier dans la crontab. Peux-tu copier-coller le contenu de ta crontab ?
Ajouter un commentaire
Réponse
+0
moins plus
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
Satrialien - 2 mai 2005 à 17:34
désolé je me suis gouré dans mon post, je parlais bien de la commande "crontab cronfile" qui est correcte...
Ajouter un commentaire
Réponse
+0
moins plus
à 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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Satrialien - 3 mai 2005 à 10:59
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
sandrill0n - 3 mai 2005 à 13:13
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
SatrialienSatrialien - 3 mai 2005 à 14:01
même si tu fais un echo dans la première ligne de ton programme, tu n'as pas la sortie ?
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Satrialien - 4 mai 2005 à 13:42
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
sandrill0n - 4 mai 2005 à 14:21
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....
Satrialien - 4 mai 2005 à 14:33
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.
Ajouter un commentaire
Réponse
+0
moins plus
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....
SatrialienSatrialien - 4 mai 2005 à 16:39
ça devrait marcher je crois, essaies et regardes si tu retrouves bien les messages dans le fichier de traces
sandrill0n - 9 mai 2005 à 12:56
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 !
SatrialienSatrialien - 9 mai 2005 à 13:46
quels sont les droits de ce script ?
Ajouter un commentaire
Réponse
+0
moins plus
droits de paretoe : -rwxrwxr-x
droits de cronfile : -rwxr-xr-x
Ajouter un commentaire
Réponse
+0
moins plus
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
sandrill0n - 9 mai 2005 à 15:05
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à...
sandrill0n - 10 mai 2005 à 09:28
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é
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « CRON sous Unix » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook