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

Administration système Discussion :

export une variable au démarrage


Sujet :

Administration système

  1. #1
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut export une variable au démarrage
    Bonjour,
    J'ai un problème d'export de variable.
    J'ai un service personnalisé qui se lance au démarrage grace à /etc/rc3.d
    Ce service doit avoir une variable d'environement iniatilisé avant son démarrage.

    Même en rajouter l'export dans ~/.bashrc, le service n'a pas accés à la variable.

    Avez-vous une idée pour résoudre ce problème ?

  2. #2
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    J'ai trouvé une solution;
    En rajoutant un export dans le script /etc/init.d/rc, la variable est bien connue du service.

    Mais je ne sais pas si c'est trés propre...

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    c'est ce qu'il faut faire oui

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par icer
    Bonjour,
    J'ai un problème d'export de variable.
    J'ai un service personnalisé qui se lance au démarrage grace à /etc/rc3.d
    Ce service doit avoir une variable d'environement iniatilisé avant son démarrage.

    Même en rajouter l'export dans ~/.bashrc, le service n'a pas accés à la variable.

    Avez-vous une idée pour résoudre ce problème ?
    Non, effectivement ce n'est pas très propre.
    Ton script risque d'être écrasé à la prochaine mise à jour.

    Sinon, tu peux essayer de faire un script qui se lance juste avant et qui se charge simplement de l'export, mais je ne suis pas sûr que ca fonctionne.

  5. #5
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Il y a quelque chose qui m'échape quand même :

    Dans /etc/passwd chaque utilisateur est associé à un shell (bash dans mon cas),
    et ~/.bashrc est un script qui est lu quand l'utilisateur se connecte.

    Avec la command
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su un_utilisateur -c "command"
    , (placée dans /etc/init.d/mon_service), on exécute une commande comme si on était un_utilisateur dans le MEME environement que celui-ci, ce qui inclu le même shell (bash). Donc le script ~/.bashrc doit être lu ! et si dans ce script il y a un export, le programme lancer par la commande su, doit connaitre cette variable.

    Or, ce n'est pas le cas !!!

    Pourquoi ???
    qu'est-ce que j'ai raté ?

  6. #6
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Non, effectivement ce n'est pas très propre.
    Ton script risque d'être écrasé à la prochaine mise à jour.

    Sinon, tu peux essayer de faire un script qui se lance juste avant et qui se charge simplement de l'export, mais je ne suis pas sûr que ca fonctionne.
    Quelle serait la solution propre et sûre alors ?

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par icer
    Il y a quelque chose qui m'échape quand même :

    Dans /etc/passwd chaque utilisateur est associé à un shell (bash dans mon cas),
    et ~/.bashrc est un script qui est lu quand l'utilisateur se connecte.

    Avec la command
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su un_utilisateur -c "command"
    , (placée dans /etc/init.d/mon_service), on exécute une commande comme si on était un_utilisateur dans le MEME environement que celui-ci, ce qui inclu le même shell (bash). Donc le script ~/.bashrc doit être lu ! et si dans ce script il y a un export, le programme lancer par la commande su, doit connaitre cette variable.

    Or, ce n'est pas le cas !!!

    Pourquoi ???
    qu'est-ce que j'ai raté ?
    Tiré de la page man de bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    When an interactive shell that is not a login shell  is  started,  bash
    reads  and executes commands from ~/.bashrc, if that file exists.  This
    may be inhibited by using the --norc option.  The --rcfile file  option
    will  force  bash  to  read  and  execute commands from file instead of
    ~/.bashrc.
     
    When bash is started non-interactively, to  run  a  shell  script,  for
    example, it looks for the variable BASH_ENV in the environment, expands
    its value if it appears there, and uses the expanded value as the  name
     of  a  file to read and execute.
    Donc, en gros, le shell se comporte différement s'il est interactif ou exécuté depuis un script.
    Mais tu peux faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MA_VARIABLE=valeur commande
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    export MA_VARIABLE=valeur
    .  script_lancer_commande
    Citation Envoyé par icer
    Quelle serait la solution propre et sûre alors ?
    Je pense que la solution la plus propre serait (si c'est possible) de changer une option dans un fichier de configuration qui soit équivalente à cette variable d'environnement.

    Au pire, tu as toujours la solution rapide et sale

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Citation Envoyé par icer
    Il y a quelque chose qui m'échape quand même :

    Dans /etc/passwd chaque utilisateur est associé à un shell (bash dans mon cas),
    et ~/.bashrc est un script qui est lu quand l'utilisateur se connecte.

    Avec la command
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    su un_utilisateur -c "command"
    , (placée dans /etc/init.d/mon_service), on exécute une commande comme si on était un_utilisateur dans le MEME environement que celui-ci, ce qui inclu le même shell (bash). Donc le script ~/.bashrc doit être lu ! et si dans ce script il y a un export, le programme lancer par la commande su, doit connaitre cette variable.

    Or, ce n'est pas le cas !!!

    Pourquoi ???
    qu'est-ce que j'ai raté ?
    Regarde dans la man la différence entre les deux commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    su - un_utilisateur
    su un_utilisateur
    Solution : rajouter le '-' dans ton script devrait suffire.

  9. #9
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Merci gangsoleil,

    J'ai rajouter le tiret à la commande su et on obtient bien le résultat attendu.
    ça me paraît beaucoup plus propre ainsi. Merci encore de ton aide.

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

Discussions similaires

  1. [Ubuntu 13.04] Exporter une variable permanente dans le PATH
    Par absot dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 22/10/2013, 18h11
  2. Exporter une variable dans une feuille excel
    Par adrien.gendre dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/07/2007, 20h36
  3. exporter une variable d'une fonction
    Par omelhor dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2006, 08h59
  4. Exporter une variable via un script sous KSH
    Par Snivel dans le forum Linux
    Réponses: 4
    Dernier message: 09/12/2005, 16h44
  5. Réponses: 3
    Dernier message: 23/02/2005, 14h34

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