Rechercher : dans
Par :

CRON sous Unix

Dernière réponse le 12 mai 2005 à 16:22:53 sandrill0n, le 2 mai 2005 à 16:59:26 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « CRON sous Unix » dans :
Le bus USB (Universal Serial Bus) Voir Présentation du bus USB Le bus USB (Universal Serial Bus, en français Bus série universel) est, comme son nom l'indique, basé sur une architecture de type série. Il s'agit toutefois d'une interface entrée-sortie beaucoup plus rapide que les ports...
Code pour télécommande universelle VoirTélécommande universelle Philips Télécommande universelle Thomson ROC Télécommande universelle One for all Télécommande universelle Star Choice Télécommande universelle Marmitek Télécommande universelle Lifetec LT Télécommande universelle...
Unidialog - Accès impossible VoirLe Service Unidialog des Assedic permet à tout moment, partout en France, d'effectuer le traitement immédiat de votre dossier : déclaration de situation mensuelle consultation de votre dossier obtention d'une attestation changement de...
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) VoirConversion format de fichier DOS UNIX / UNIX DOS Préambule Ce qu'il faut savoir Conversion DOS vers UNIX Conversion UNIX vers DOS Préambule Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce...
Télécharger Revo Uninstaller VoirRevo Uninstaller est un logiciel édité par VS Revo Group permettant de faire un nettoyage en profondeur avec diverses fonctionnalités : Nettoyage, désinstallation de programmes avec suppression des clefs de registres périmées. Un mode Chasseur...
UNIX - Les fichiers VoirIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de...
Commandes UNIX VoirTableau des principales commandes UNIX Commande Unix Description Options ls liste le contenu d'un répertoire -a Affiche tous les fichiers, y compris les fichiers cachés ...
Introduction aux systèmes UNIX VoirLe système UNIX Le système Unix est un système d'exploitation multi-utilisateurs, multi-tâches, ce qui signifie qu'il permet à un ordinateur mono ou multi-processeurs de faire exécuter simultanément plusieurs programmes par un ou plusieurs...

1

Satrialien, le 2 mai 2005 à 17:24:38

Bonjour,

normalement la commande cron cronfile charge le fichier dans la crontab. Peux-tu copier-coller le contenu de ta crontab ?

Répondre à Satrialien

2

sandrill0n, le 2 mai 2005 à 17:29:53

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

Répondre à sandrill0n

3

Satrialien, le 2 mai 2005 à 17:34:48

Désolé je me suis gouré dans mon post, je parlais bien de la commande "crontab cronfile" qui est correcte...

Répondre à Satrialien

4

Satrialien, le 2 mai 2005 à 17:40:02

à 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 ?

Répondre à Satrialien

5

sandrill0n, le 2 mai 2005 à 18:51:22

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 !

Répondre à sandrill0n

6

Satrialien, le 3 mai 2005 à 10:21:25

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 ?

Répondre à Satrialien

7

sandrill0n, le 3 mai 2005 à 10:49:33

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

Répondre à sandrill0n

8

Satrialien, le 3 mai 2005 à 10:59:16

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

Répondre à Satrialien

9

sandrill0n, le 3 mai 2005 à 13:13:16

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

Répondre à sandrill0n

10

Satrialien, le 3 mai 2005 à 14:01:31

Même si tu fais un echo dans la première ligne de ton programme, tu n'as pas la sortie ?

Répondre à Satrialien

11

sandrill0n, le 4 mai 2005 à 10:24:32

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 ?

Répondre à sandrill0n

12

Satrialien, le 4 mai 2005 à 10:29:20

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.

Répondre à Satrialien

13

sandrill0n, le 4 mai 2005 à 11:15:46

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 ?

Répondre à sandrill0n

14

Satrialien, le 4 mai 2005 à 13:42:54

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.

Répondre à Satrialien

15

sandrill0n, le 4 mai 2005 à 13:50:19

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

Répondre à sandrill0n

16

Satrialien, le 4 mai 2005 à 14:13:49

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.

Répondre à Satrialien

17

sandrill0n, le 4 mai 2005 à 14:21:03

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....

Répondre à sandrill0n

18

Satrialien, le 4 mai 2005 à 14:33:15

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.

Répondre à Satrialien

19

sandrill0n, le 4 mai 2005 à 15:31:40

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....

Répondre à sandrill0n

20

Satrialien, le 4 mai 2005 à 15:50:50

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)

Répondre à Satrialien

21

sandrill0n, le 4 mai 2005 à 16:36:05

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)

Répondre à sandrill0n

22

Satrialien, le 4 mai 2005 à 16:39:59

ça devrait marcher je crois, essaies et regardes si tu retrouves bien les messages dans le fichier de traces

Répondre à Satrialien

23

sandrill0n, le 9 mai 2005 à 12:56:25

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 !

Répondre à sandrill0n

24

Satrialien, le 9 mai 2005 à 13:46:10

Quels sont les droits de ce script ?

Répondre à Satrialien

25

sandrill0n, le 9 mai 2005 à 13:52:34

Droits de paretoe : -rwxrwxr-x
droits de cronfile : -rwxr-xr-x

Répondre à sandrill0n

26

Satrialien, le 9 mai 2005 à 14:06:10

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

Répondre à Satrialien

27

sandrill0n, le 9 mai 2005 à 15:05:17

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à...

Répondre à sandrill0n

28

sandrill0n, le 10 mai 2005 à 09:28:07

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é

Répondre à sandrill0n

29

sandrill0n, le 10 mai 2005 à 15:57:53

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 ?

Répondre à sandrill0n

30

sandrill0n, le 11 mai 2005 à 17:06:26

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...

Répondre à sandrill0n

31

 fozzie, le 12 mai 2005 à 16:22:53

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

Répondre à fozzie