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 :

Script : cohabitation bash / csh / export / cron


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut Script : cohabitation bash / csh / export / cron
    Bonjour.

    Voici mon problème :

    Je me connecte sur une machine (ubuntu) avec un user qui a csh comme shell. Je veux utiliser un script bash que je lance depuis crontab mais ça ne marche pas... question d'environnement je présume.

    Le script marche très bien si il est lancé depuis le shell "./mon_script.sh"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    source ma_source.sh
    echo $PATH
    echo $LOGICIEL
    echo $LOGICIEL_ROOT
    mon fichier "sourcé" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    export PATH=/home/moi/bin/:$PATH
    export LOGICIEL=/home/moi/logiciel5.2.1
    export LOGICIEL_ROOT=/home/moi/logiciel5.2.1
    export PATH=/home/moi/logiciel5.2.1/bin:$PATH
    Depuis la ligne de commande le résultat est correct, tous les chemins son biens affichés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /usr/....blabla
    /home/moi... blabla
    /home/moi/... blabla
    Mais depuis crontab le résultat est seulement :

    Merci d'avance de vos suggestions.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    Bonjour,

    donne le chemin complet du script à sourcer dans ton script principal.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Bonjour,
    merci de votre réponse.
    Le fait de mettre le chemin absolu règle effectivement partiellement le problème, merci.
    Mais pour fonctionner vraiment correctement certains logiciels ont besoin de certains chemins relatifs.
    Je n'arrive pas à faire prendre en compte cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LOGICIEL_ROOT=/home/moi/logiciel5.2.1
    Si je lance le script depuis la crontab.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut
    tu veux dire, pour les autres scripts dans la crontab ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Non sur un seul script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00 14 * * * /home/moi/mon_script.sh
    ce script appelle "logiciel5.2.1",

    et logiciel5.2.1 a besoin de trouver des librairies, base données... relativement à son repertoire d'installation. Il faudrait donc que j'arrive à indiquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOGICIEL5.2.1_ROOT=/home/moi/logiciel5.2.1
    à cron.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 636
    Par défaut

    un nom de variable ne peut pas contenir des points.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zebulon999 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    source ma_source.sh
    echo $PATH
    echo $LOGICIEL
    echo $LOGICIEL_ROOT
    Le fait de mettre le chemin absolu règle effectivement partiellement le problème, merci.
    Mais pour fonctionner vraiment correctement certains logiciels ont besoin de certains chemins relatifs.
    Salut

    Remplace ton script par ceci
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    source "$(dirname $0)/ma_source.sh"
    echo $PATH
    echo $LOGICIEL
    echo $LOGICIEL_ROOT
    Mais veille bien à donner un chemin (relatif ou absolu) lorsque tu appelles "mon_script.sh"...

    Citation Envoyé par N_BaH Voir le message

    un nom de variable ne peut pas contenir des points.
    Probablement une erreur de recopie parce que jusqu'alors c'était écrit export LOGICIEL_ROOT=/home/moi/logiciel5.2.1...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    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 102
    Par défaut
    Citation Envoyé par zebulon999 Voir le message
    Non sur un seul script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00 14 * * * /home/moi/mon_script.sh
    ce script appelle "logiciel5.2.1",

    et logiciel5.2.1 a besoin de trouver des librairies, base données... relativement à son repertoire d'installation. .
    Ben, il est là, le problème!

    Tu dis que le script "logiciel5.2.1" a besoin de trouver des librairies, base données... relativement à son répertoire d'installation!!!

    Il faut bien distinguer le répertoire courant du répertoire d'installation:

    Dans cet exemple, /tmp/truc est le répertoire courant et /home/moi est le répertoire d'installation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd /tmp/truc
    /home/moi/logiciel5.2.1
    Si le code de "logiciel5.2.1" lui-même fait référence à un chemin non absolu, c'est-à-dire ne commençant pas par "/", alors, par définition, ce chemin sera considéré comme relatif au répertoire courant!

    Si bien que, à l'intérieur de logiciel5.2.1, ./data/machin référencera exactement /tmp/truc/data/machin
    ../autre/bidule référencera /tmp/autre/bidule
    config/zorglub référencera /tmp/truc/config/zorglub
    etc.

    Si un logiciel a besoin de référencer des chemins relatifs à son répertoire d'installation, àmha, il devrait faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my_install_dir=$(dirname $0)
    # ou bien
    my_install_dir=$(cd $(dirname $0); pwd)
    # ou bien
    my_install_dir=$(cd -P $(dirname $0); pwd)
     
    # puis:
    my_data_dir=${my_install_dir}/data
    my_config_dir=${my_install_dir}/config
    my_up_dir=${my_install_dir}/..
    # etc.
    Si le script "logiciel5.2.1" fait l’assomption qu'il est toujours lancé depuis son répertoire d'installation, c'est au minimum un trait, voire une faiblesse, voire un bug!

    Si c'est bien le cas et que tu peux corriger "logiciel5.2.1" avec mes préconisations, pas de souci, sinon il te reste la ressource de faire coïncider le répertoire courant et le répertoire d'exécution, comme il est très probablement indiqué dans la doc de logiciel5.2.1 :
    "Attention! Ce logiciel /home/moi/logiciel5.2.1 (est mal foutu et) ne peut fonctionner que s'il est lancé depuis le répertoire /home/moi avec la commande cd /home/moi; ./logiciel5.2.1"

    Ainsi, dans ton script /home/moi/mon_script.sh, pour te mettre en conformité avec les prérequis abondamment documentés de logiciel5.2.1, tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (cd $(basename "${LOGICIEL_ROOT}"); "${LOGICIEL_ROOT}")
    # ou juste
    (cd $(basename "${LOGICIEL_ROOT}"); ./logiciel5.2.1)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Merci Jack-ft,
    le problème est résolu, grâce à ta réponse.

    Merci à vous tous pour votre aide!

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

Discussions similaires

  1. script connection ssh pour export database
    Par princesse95 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 05/10/2009, 17h40
  2. script spool sqlplus pour exportation
    Par crazykangourou dans le forum Sql*Plus
    Réponses: 11
    Dernier message: 23/10/2007, 17h45
  3. [Shell] Lancer un script 1x par mois avec cron
    Par loopback dans le forum Linux
    Réponses: 2
    Dernier message: 19/04/2007, 16h21
  4. Script Shell Bash
    Par kolfred dans le forum Linux
    Réponses: 4
    Dernier message: 06/10/2006, 12h04
  5. Script simple en csh
    Par FinalSpirit dans le forum Linux
    Réponses: 10
    Dernier message: 02/01/2006, 22h37

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