Partage
  • Partager sur Facebook
  • Partager sur Twitter

Commande qui ne fonctionne pas via un script

Sujet résolu
Anonyme
    30 juillet 2015 à 10:55:56

    Bonjour,

    J'ai une erreur plutôt bizarre, pour commencer voici mon script (qui pour but de me retourner une liste de table dans une base de données).

    #! /bin/sh
    
    #echo $0 $1 $2 $3 $4
    
    if [ -z ${3} ]
    then
        echo "use: ${0} <dbname> <dbport> <username> [password]"
        exit 1
    fi
    
    dbname=${1}
    port="--port=${2}"
    user=${3}
    pass=""
    
    if [ ! -z ${4} ]
    then
        pass="-p${4}"
    fi
    
    echo   "mysql -u ${user} ${pass} ${dbname} ${port} -e 'SHOW TABLES' | sed '1d'"
    
    tables=`mysql -u ${user} ${pass} ${dbname} ${port} -e "SHOW TABLES" | sed '1d'`
    
    if [ $? -eq 0 ] && [ ! -z "${tables}" ]
    then
        echo ${tables}
    fi
    

    Pour information le script fonctionne très bien et est appelé par un script PHP qui ensuite traite l'information.

    Cependant voilà sur un de mes serveurs le script n'arrive pas à fonctionner comme voulu.

    Lorsque j’exécute : ./script.sh $OPENSHIFT_APP_NAME $OPENSHIFT_MYSQL_DB_PORT $OPENSHIFT_MYSQL_DB_USERNAME $OPENSHIFT_MYSQL_DB_PASSWORD

    (Les variables sont bonnes)

    J'obtiens une erreur de mysql : ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    Cependant lorsque je tape la commande renvoyer par le echo (ligne 21) qui est théoriquement LA MÊME que celle exécutée ligne 23, surprise la commande me retourne pas l'erreur mysql mais bien la liste des tables.

    Du coup je vois pas trop d'où vient le problème ... Cependant je me demande si l'utilisation des ` ` ne lance pas la commande d'une autre manière (genre bac à sable) empêchant la connexion à la base ...

    La seul différence entre le serveur où le script fonctionne et celui où il ne fonctionne pas est l'OS :

    - Ubuntu 14.04 (fonctionne)

    - CentOS 6.5 (ne fonctionne pas)

    Merci pour votre aide

    -
    Edité par Anonyme 30 juillet 2015 à 10:57:31

    • Partager sur Facebook
    • Partager sur Twitter
      30 juillet 2015 à 11:26:00

      Salut,les distribution linux ne fonctionne pas tous de la même manière je te laisse te renseigner sur cette commande. 
      dos2unix
      • Partager sur Facebook
      • Partager sur Twitter
        30 juillet 2015 à 15:05:03

        salut,

        Zizmir,

        quel rapport entre le format de fin de ligne et l'erreur citée ? d'autant que d'un Unix/Linux à un autre il y a peu de chance que l'un des deux ait ses formats de fins de lignes au format DOS !

        Kev024,

        le problème étant spécifique à Centos, je te recommande de t'adresser au forum Centos, après y avoir fait une recherche.

        • Partager sur Facebook
        • Partager sur Twitter

        Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          30 juillet 2015 à 15:13:11

          Je disais cela en conséquence, car j'ai trouvé un problème de ce genre et qui a été résolu grâce à cette commande. De plus, comme il a dit son script fonctionne très bien sur sont Ubuntu et non sur son Centos. Regarde ici , son problème est similaire.

          -
          Edité par Zizmir 30 juillet 2015 à 15:32:24

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            30 juillet 2015 à 15:29:44

            Merci pour votre aide

            Bon, je n'ai pas compris pourquoi j'avais ce problème mais j'ai une solution.

            Lorsque je tape directement mysql -u machin il se connecte sur le bon socket. Mais dans le script il ne vas pas sur le bon socket.

            Du coup en rajoutant à mysql l'option -S je peux lui spécifier le socket. Je pense que le problème est surtout lié à l'environnement OpenShift. Donc maintenant mon script marche sans savoir pourquoi j'ai besoin de le spécifier dans le script et pas quand je tape la commande directement.

            Pour ce qui est du dos2unix malheureusement je n'ai pas la possibilité d'installer de paquet (que ça soit en local, sur la machine virtuelle ou OpenShift).

            EDIT: 

            Le problème est bien lié à OpenShift, en gros quand on se connecte à SSH un fichier est sourcer (/usr/bin/rhcsh), qui contient une fonction mysql qui permet de se connecter à son instance mysql sans définir d'informations (user/mdp ...).

            Du coup dans le shell cette fonction est appeler et fonctionne, mais dans le script ce fichier n'est pas sourcer du coup il lui manque des informations pour se connecter à la base.

            -
            Edité par Anonyme 30 juillet 2015 à 17:28:40

            • Partager sur Facebook
            • Partager sur Twitter

            Commande qui ne fonctionne pas via un script

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown