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. 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
    1. Il faudrait que tu nous affiches ta ligne dans crontab? c'est peut etre le path qui est mauvais ou pas complet?
      0
      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
        0
        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)
          0
      2. 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?
        0
        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 :(
          0
          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
            0
            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
              0