Crontab et spool

Bonjour,

Je voudrais récuperer des données d'une base de données a des heures precises. Pour cela j'ai fait un script qui execute une requete sql. J'ai utilise le Spool pour mettre les données récupérees dans un fichier log.
Le script s'exécute et recupere les données parfaitement quand je l'exécute a la main. Mais quand je mets le script en crontab il ne s'execute plus. Je ne sais pas pourquoi.
Quelqu'un a une idee, svp?

7 réponses

  1. Salut,

    C bon j'ai toruve la solution. En fait il faut que j'ajoute un fichier .profile pour que la crontab reconnaisse l'utilisateur.

    Merci beaucoup de votre aide
    1. Contributeur
      Salut Cleops,

      Au vu de tes messages, je ne sais pas si tu as suivi les recommandations relatives à l'indication du chemin complet de tes commandes.

      Mais quel est le chemin entier pour sqlplus?

      Fait :

      which sqlplus
      which date


      Et remplace les commandes "sqlplus" et "date" par ces mêmes commandes avec leur chemin complet ("date" aussi, c'est plus sûr).

      Il n'est même pas dit que la variable d'environnement "$HOME" soit également présente. Si tu peux, remplace là par le chemin en dur.

      Et puis ... quand quelque chose va de travers avec cron, c'est quand même utile de consulter les logs de cron (sous /var/log en principe). Tu devrais avoir plein de trucs instructifs dans tes logs, vu que les stdout et stderr de ton script lancé par cron devraient y être.

      Dal
      1. Tout d'abord merci de vos reponses.

        J'ai regarde j'ai bien mis mon script en mode execution. Je ne pense pas que se soit un probleme de chemin entier car la requete cree mon fichier log_test.log mais n'ecrit rien dedans. Donc ca veut dire qu'il a reussi a rentrer dans la base de données. Je ne sais pas du tout d'ou vient le probleme :(
        1. Tout d'abord merci de vos reponses.

          J'ai regarde j'ai bien mis mon script en mode execution. Mais quel est le chemin entier pour sqlplus?
          1. mets aussi les chemins entiers de tes exécutables (je pense en l'occurrence à sqlplus dans ton script ksh)

            atouzazar

            parfois l'environnement n'est pas le même dans un shell et dans crontab (mets dans ton crontab un env|sort > $HOME/trucbidule et tu vas voir que ça se résume à pas grand chose. Y en a qui ont eu des problèmes...)
            1. Voici ma ligne en crontab:
              22 * * * * "$HOME/AACSTA/shl/toto.ksh"

              ma requete:
              SPOOL $HOME/AACSTA/shl/log_test.log
              select t.event_id
              from user_event t
              where t.event_date > sysdate -1/24;
              SPOOL OFF
              exit;

              et le script :
              #!/usr/bin/ksh
              sqlplus -s name/pwd@base @$HOME/AACSTA/shl/test_req.sql
              echo "$(date) ca marche " >> $HOME/AACSTA/log/insert.log

              donc il affiche bien la 2e ligne mais pour la premiere il ne se passe rien.

              Merci d'avance pour votre aide
              1. Je ne suis pas tres calé en requetes SQL, mais si tu dis que ta requete marche manuellement, donc le probleme c'est le cron. As-tu mis ton script en mode execution? (c-a-d: chmod +x ton_script)
            2. Il faudrait que tu nous affiches ta ligne dans crontab? c'est peut etre le path qui est mauvais ou pas complet?