CRON sous Unix
sandrill0n
-
fozzie -
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
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
A voir également:
- CRON sous Unix
- Z-cron - Télécharger - Optimisation
- Fichier executable unix - Forum MacOS
- Formation ibm aix unix ✓ - Forum Linux / Unix
- Comment ouvrir fichier exécutable unix - Forum MacOS
- JPEG formatés en Fichier exécutable Unix - Forum MacOS
16 réponses
Bonjour,
normalement la commande cron cronfile charge le fichier dans la crontab. Peux-tu copier-coller le contenu de ta crontab ?
normalement la commande cron cronfile charge le fichier dans la crontab. Peux-tu copier-coller le contenu de ta crontab ?
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
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
à 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
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 ?
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.0qui 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 ?
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 !
j'ai trouvé le fichier où il faut les rentrer, mais après c'est le flou total !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
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 ?
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 ?
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.
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.
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 ?
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 ?
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
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
tu peux faire un test qd même : ton pgm
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 :
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.
/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.
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....
"/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....
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 :
n'oublies pas de faire un
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.
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.kshpour 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.
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....
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....
essaies en mettant :
dans ton cronfile
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
J'ai comme tu m'avais dit au début, avec le script :
et j'ai ça comme sortie :
Bien sûr le programme ne s'exécute pas...
Qu'en penses-tu ?
#!/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 ?
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...
En plus, j'ai la pression pour le régler rapidement...
Please, aidez moi...
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
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