Forum Programmation.shell CRON WGET ...

Posté par  .
Étiquettes : aucune
0
13
avr.
2005
Bonjour,
J'aimerais faire un fichier (script) de tâche planifier, un script que je lancerait par cron.
Par exemple, dans un script lancer un wget pour la recup d'un fichier, puis si le fichier à bien été recup, lancer d'autre commande shell derrière.
Sachant que je n'y connais rien en prog shell, quelqu'un peut me faire un ch'ti exemple ?
De plus peut'on, toujours dans un scipt shell, lancer par une tâche cron,
vider le contenu d'une table MYSQL (DELETE FROM table ;) ?

Merci.
  • # adresse

    Posté par  (site web personnel) . Évalué à 1.

  • # c'est possible !

    Posté par  (site web personnel) . Évalué à 1.

    bon alors par exemple le wget tu peux le faire comme ca :

    #!/bin/bash
    wget http://monurl/(...) -O outfile # le fichier téléchargé s'appellera outfile
    if [ -f outfile ]; # test de présence du fichier
    then;
    autres_commandes;
    rm -f outfile; # effacement du fichier téléchargé apres traitement pour le prochain lancement
    fi;

    pour le mysql c'est encore plus simple, redirection d'entrée standard ou fichier
    je conseille toutefois de mettre ca dans un script ou seul l'utilsateur concerné a les droits de lecture, parce que le mot de passe utilisé pour mysql est en clair

    en passant par un fichier tiers (méthode je pense à conseiller car si tu dois faire évoluer le script plus tard, ca t'évitera d'avoir une ligne de commande qui va jusqu'a poitier)
    tu créé un fichier toto.sql dans lequel tu mets tes commandes brut de décoffrage

    delete * from matable;

    ensuite, dans un autre script, tu lances l'execution via l'outil mysql
    il faut préciser le user, le mot de passe (s'il y a lieu) et le nom de la base à laquelle exécuter les requetes
    du genre si ton utilisateur est dbplop, mot de passe dbplop, sur la base dbplop:

    #!/bin/sh
    /usr/bin/mysql -udbplop -pdbplop dbplop < toto.sql
    • [^] # Re: c'est possible !

      Posté par  . Évalué à 1.

      après le wget il vaut mieux tester en utilisant la variable $? qui contiendra :
      0 si le téléchargement a réussi
      1 si le fichier n'est pas accessible
      etc etc

      si tu teste la présence du fichier et qu'il n'a pas été téléchargé en entier, le fichier sera quand même présent ... tu n'aura donc pas le résultat souhaité
    • [^] # Re: c'est possible !

      Posté par  . Évalué à 1.

      Bon j'ai un pb, il me dit :
      line 15: syntax error: unexpected end of file
      Voila le script :

      #!/bin/sh
      #wget http://www.monsite/hello.xml(...) -O hello.xml
      if [ -f hello.xml ];
      then
      sed -f regles.sed hello.xml > hello2.xml
      /usr/bin/mysql -utest -ptest dbtest < delete.sql
      sabcmd hello.xsl hello2.xml | mysql -utest -ptest dbtest
      rm -f hello.xml
      rm -f hello2.xml
      else
      echo Probleme
      fi

      J'ai essayé avec ; et sans ; et pas de changement tjrs la même herreure!
      A L'AIDE PLEASE !
      • [^] # Re: c'est possible !

        Posté par  (site web personnel) . Évalué à 1.

        plutot comme ca :


        #!/bin/sh
        #wget http://www.monsite/hello.xml(...)(...) -O hello.xml
        if [ -f hello.xml ];
        then
        sed -f regles.sed hello.xml > hello2.xml
        /usr/bin/mysql -utest -ptest dbtest < delete.sql
        sabcmd hello.xsl hello2.xml | mysql -utest -ptest dbtest
        rm -f hello.xml
        rm -f hello2.xml
        else
        echo Probleme
        fi;


        tu as du oublier le ; apres le fi

        ceci dit, comme il est expliqué plus haut, je te conseille d'utiliser la valeur de retour de wget dans le if, ca sera plus propre (man wget)
        • [^] # Re: c'est possible !

          Posté par  . Évalué à 1.

          Merci, en fait le pb était que j'avais écrit le script sous windows puis renomer et envoyer sous linux...
          Les retours chariot n'étant pas les mêmes, linux ne les reconnaissait pas !
          Bref, sinon je suis bien intéressé par ta variables wget mais je ne trouve rien dessus, alors si tu pouvais me montrer comment verifier si le dl c bien passé...

          Merci !
          P.S : De plus j'ai un sérieux pb ce que dans mon script posté au dessus, même si le fichier n'ai pas la, il rentre dans le if, donc il me drop la table et pour le reste il essaye, mais vu que le fichier n'est pas la il plante !
          Mon pb est que si le fichier n'est pas sur le dur, je ne veux pas supprimer ma table !
          HELP THANKS ;)
          • [^] # Re: c'est possible !

            Posté par  . Évalué à 2.

            C'est pour ça qu'on te dit d'utiliser la variable $?

            Exemple :

            #!/bin/sh
            wget http://www.monsite/hello.xml(...)(...)(...) -O hello.xml
            if [ $? = 0 ];
            then
            sed -f regles.sed hello.xml > hello2.xml
            /usr/bin/mysql -utest -ptest dbtest < delete.sql
            sabcmd hello.xsl hello2.xml | mysql -utest -ptest dbtest
            rm -f hello.xml
            rm -f hello2.xml
            else
            echo Probleme
            fi;

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.