IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Impossible d'exécuter une commande avec su dans un script bash


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable Assurance Qualité
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Assurance Qualité

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Impossible d'exécuter une commande avec su dans un script bash
    Bonjour,

    J'écris un script bash très simple. Il doit exécuter deux commandes depuis mon utilisateurs, koshie, au nom de postgresql. Il doit droper une base de donnée puis la recréer en lui attribuant comme owner un utilisateur postgresql.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    #
    # -- Drop old database and create new one
    #
     
    # Drop the database 
    # su postgres -c "dropdb calebasse"
    # Create the new database with calebasse user as owner
    su postgres -c "/usr/bin/createdb calebasse -O calebasse"
    Comme vous pouvez le voir, la première commande est commenté afin de simplement tester la création de la base que j'ai dropé manuellement. Ici, c'est donc censé créer la base 'calebasse' en l'attribuant à l'owner 'calebasse'. Or il ne se passe rien, la commande ne fonctionne pas. Pourtant la commande fonctionne très bien lorsqu'elle est lancé manuellement dans le shell.

    Je me doute donc qu'il y a un petit problème par rapport à mon script, peut-être dans la manière qu'il est lancé. J'utilise la méthode suivante :

    Je déplace le script dans /usr/local/bin, je lui attribue les droits suivants : -rwxr-xr-x 1 root staff 467 18 déc. 09:34 init-pre-prod.sh

    Et j'ai essayé les méthodes suivantes pour le lancer :

    _ sudo init-pre-prod.sh
    _ sudo bash /usr/local/bin/init-pre-prod.sh
    _ sudo ./usr/local/bin/init-pre-prod.sh

    Je l'ai aussi déplacé dans mon home et j'ai ré-essayé les deux dernières commandes plus haut mais ça ne marche pas.

    J'ai aussi essayé de me mettre directement en root (dans le doute) et c'est pareil.

    Le système est une Debian 6.0.6.

    Avez-vous une idée s'il vous plaît ?

    Cordialement, Koshie

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Quels sont les messages d'erreur ?
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable Assurance Qualité
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Assurance Qualité

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Il n'y en a pas, j'ai même tenté de faire un sudo init-pre-prod.sh 2> error.txt mais le fichier est vide.

  4. #4
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Je ne suis pas expert donc je peux me tromper, mais ne faut il pas déclarer cela dans le sudoer avec visudo ? (je me rappel que j'avais eu ce cas avec apache..)

    puisque ton script dois exécuter une commande sudo sans mot de passe, si je me rappel bien.
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable Assurance Qualité
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Assurance Qualité

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Je pense ne pas avoir compris ce que tu veux dire.

    Mon utilisateur est configuré pour pouvoir lancer une commande en root, tu veux dire que je dois ajouter encore autre chose dedans ?

  6. #6
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su postgres -c "/usr/bin/createdb calebasse -O calebasse"
    Utilise "su", et su te demande un mot de passe non ?

    Quand tu exécute ton script, comme le mot de passe n'est pas donné, rien ne se fait, enfin d'après moi, mais comme je l'ai dis, je ne suis pas expert unix.
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  7. #7
    Candidat au Club
    Homme Profil pro
    Responsable Assurance Qualité
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Assurance Qualité

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    C'est configuré de telle sorte que je n'ai pas besoin de taper le mot de passe, c'est un env de pré-prod.

  8. #8
    Candidat au Club
    Homme Profil pro
    Responsable Assurance Qualité
    Inscrit en
    Décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable Assurance Qualité

    Informations forums :
    Inscription : Décembre 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Ça fonctionne et c'était suite à deux erreurs de ma part, toutes les deux très bête.

    J'ai maladroitement paster le morceaux de code que je soupçonnais être la cause du problème, or l'erreur se situait plus haut, voici le script complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/bin/bash
     
    # Update the pre-production environment
     
    #
    # -- Update with git 
    #
     
    # Change directory to the good one
    cd /home/calebasse/venv/calebasse/
    # Get update with git
    su calebasse -c 'git pull'
    exit
     
    #
    # -- Drop old database and create new one
    #
     
    # Drop the database
    su postgres -c "dropdb calebasse"
    # Create the new database with calebasse user as owner
    su postgres -c "createdb calebasse -O calebasse"
    C'est exit qui posait problème... Et donc ma deuxième erreur était de ne pas avoir pasté le code complet.

    Merci quand même pour le temps que tu m'as accordé !

    Cordialement, Koshie

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par koshieDotFr Voir le message
    Ça fonctionne et c'était suite à deux erreurs de ma part, toutes les deux très bête.

    C'est exit qui posait problème... Et donc ma deuxième erreur était de ne pas avoir pasté le code complet.
    Juste pour information (et éviter que cela ne se reproduise), l'une des manières "standard" de débeuguer un script, c'est de le lancer en mode trace, afin de voir les lignes exécutées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash -x /usr/local/bin/init-pre-prod.sh
    De cette manière, tu aurais tout de suite vu d'où venait le problème!
    HTH
    )jack(

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2014, 10h03
  2. Impossible d'exécuter une commande scp
    Par keviin55 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 19/07/2012, 18h24
  3. Lancer une commande avec pipes depuis un script
    Par theclem35 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 08/02/2012, 20h41
  4. exécuter une commande avec ShellExecute
    Par LN(a) dans le forum Delphi
    Réponses: 2
    Dernier message: 08/06/2007, 16h34
  5. Exécuter une commande système avec perl
    Par Olivier Regnier dans le forum Langage
    Réponses: 12
    Dernier message: 08/04/2007, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo