[CRON] problème d'exécution

Résolu
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 :
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

22 réponses

  • 1
  • 2
  1. fozzie
     
    ç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).
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ;-))
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      Ben oui mais ça marce pas et je pensais que c'était le meilleur forum...

      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 ?
      0
  3. fozzie
     
    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
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      en faisant juste :

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

      je rajoute #!/bin/csh au début ?
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. fozzie
     
    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
    0
  6. fozzie
     
    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
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      J'ai fait ça :
      10 09 * * 1,2,3,4,5     /usr/bin/csh /export/home/kthmgr/crondir/paretolot 1 /var/opt/applications/mo/Report/sm3.0 2> /export/home/kthmgr/crondir/essai.txt


      Résultat de fichier d'erreur :
      Variable syntax
      


      Comprends pas...
      0
  7. fozzie
     
    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.
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      Voici ce que j'ai fait :

      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 ....
      0
    2. sandrill0n Messages postés 81 Statut Membre
       
      A y est...

      J'ai essayé : 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

      Résultat : Killed

      Là je crois que j'ai un gros souci...
      0
  8. fozzie
     
    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
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      le shell seul marche (avec les modifs) ....

      je retente dans le cron
      0
  9. fozzie
     
    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
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      J'ai retenté le shell dans le cron !

      Résultat du message d'erreur :
      ld.so.1: /export/home/kthmgr/crondir/paretoe: fatal: libKI_DEBUG.so: open failed: No such file or directory


      Je crois que je ne pourrai pas m'en sortir de cette librairie !
      0
  10. fozzie
     
    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 ...
    0
  11. sandrill0n Messages postés 81 Statut Membre
     
    J'ai essayé plusieurs trucs, ça ne marche pas plus....

    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
    0
  12. fozzie
     
    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)
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      J'ai fait ça dans le shell :
      #!/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...
      0
  13. fozzie
     
    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)
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      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
      0
  14. fozzie
     
    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.
    0
  15. sandrill0n Messages postés 81 Statut Membre
     
    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
    0
  16. fozzie
     
    Et bien voilà l'erreur !!!

    dans la variable (à la fin), tu as
    /opt/applications/opt/usrlib
    au lieu de
    /opt/applications/ki/usrlib
    0
  17. sandrill0n Messages postés 81 Statut Membre
     
    ça marche !!!!!

    merci

    Par contre, il faut que je fasse autant de fichiers parx.csh que j'ai de répertoires à scruter ?
    0
  18. fozzie
     
    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
    0
    1. sandrill0n Messages postés 81 Statut Membre
       
      t'as répondu à ma question qui n'était pas très claire...

      par contre, pour la réussite du shell, je vais attendre un peu avant de crier victoire...
      je vais le laisser tourner pendant 1 heure pour voir
      0
  19. fozzie
     
    ok, alors bon courage,
    moi je pars en vacances
    0
  20. sandrill0n Messages postés 81 Statut Membre
     
    bon ben j'ai crié victoire trop vite !

    le programme ne se lance pas !
    0
  • 1
  • 2