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 :

Lancer Bash via Cron


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut Lancer Bash via Cron
    Bonjour à tous

    Voilà le soucis:

    Je cherche à lancer un script bash avec un cron, ce script marche parfaitement quand je le lance manuellement (./runFluid-efy.sh) mais lorsque je cherche à le lancer via un cron j'ai une erreur;
    il ne parviens pas à lancer une des classes du script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur : impossible de trouver ou charger la classe principale com.fluid_e.FXCEngine
    Ci dessous le script :

    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
    23
    24
    25
     
    #!/bin/sh
     
     
    # Directory of the script
    PRG="$0"
    while [ -h "$PRG" ]; do
      ls=`ls -ld "$PRG"`
      link=`expr "$ls" : '.*-> \(.*\)$'`
      if expr "$link" : '.*/.*' > /dev/null; then
        PRG="$link"
      else
        PRG=`dirname "$PRG"`/"$link"
      fi
    done
    PRGDIR=`dirname "$PRG"`
    # PROG_HOME=`cd "$PRGDIR/.." ; pwd`
    PROG_HOME=`cd "$PRGDIR" ; pwd`
     
    #export JAVA_DIR=./jdk
    export JAVA_DIR=$PROG_HOME/jdk
     
    # "$JAVA_DIR"/bin/java -Djavax.net.ssl.trustStore="$PROG_HOME/jssecacerts" -Djavax.net.ssl.trustStorePassword=changeit -jar Fluid-efy.jar
     
    /usr/bin/java -Djavax.net.ssl.trustStore="$PROG_HOME/jssecacerts" -Djavax.net.ssl.trustStorePassword=changeit -cp Fluid-efy.jar:lib/groovy/* com.fluid_e.FXCEngine
    Le cron:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # m h  dom mon dow   command
    #*/4 * * * *    /var/www/html/pim-community-standard/app/console akeneo:batch:j$
    #*/2 * * * *   /usr/bin/rename.sh
    */5 * * * *   /opt/Fluid-efy/runFluid-efy.sh >> /bash.log 2>&1
    Le script fait partie d'une solution "clef en main", dans le zip qui m'était fourni, un Jdk était à décompresser..
    Ce Jdk ne fonctionnait pas, j'ai donc du faire une install globale de Jdk (dans /usr/bin)et modifier dans le script la variable "#JAVA_DIR" de manière à pointer directement vers /usr/bin/java ).
    Après cette modification, le script s'est bien lancé manuellement mais reste le problème de l’exécution de cette tache via le Cron.

    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Essaie de vérifier qu'en tant que root, toutes tes variables d'environnement sont correctement chargées. Peut être que tu pourrais dédier un utilisateur à cette cron.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

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

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

    l'environnement de cron est minimal : des variables définies dans ~/.bashrc n'y seront pas "exportées".
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut
    Merci de vos réponses j'y est passé une partie de ma soirée, mais cette classe ne veut toujours pas se charger...

    Ce matin j'ai posé la question au "support technique"..de la solution et voici leur réponse:
    Il faut peut-être ajouter une commende cd dans le .sh pour se placer dans le répertoire Fluid-efy
    Je ne vois pas trop comment faire cela, et je ne suis pas certain de l'efficacité du conseil..avez vous une idée?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Il faut peut-être ajouter une commende cd dans le .sh pour se placer dans le répertoire Fluid-efy
    alors, ça devrait aussi fonctionner en ajoutant son chemin absolu à la classe appelée.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    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 palestrina Voir le message
    Ce matin j'ai posé la question au "support technique"..de la solution et voici leur réponse:
    Je ne vois pas trop comment faire cela, et je ne suis pas certain de l'efficacité du conseil..avez vous une idée?
    J'ai épluché la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/java -Djavax.net.ssl.trustStore="$PROG_HOME/jssecacerts" -Djavax.net.ssl.trustStorePassword=changeit -cp Fluid-efy.jar:lib/groovy/* com.fluid_e.FXCEngine
    D'après le man java, la commande "java" invoque la classe passée en argument "com.fluid_e.FXCEngine".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
           -cp classpath
                  Specifies a list of directories, JAR archives, and ZIP archives to search for class files.  Class path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the CLASS-
                  PATH environment variable.
    Donc la commande "java" cherche le fichier correspondant à la classe "com.fluid_e.FXCEngine" quelque part, en gros: argument de "-cp" ou bien "$CLASSPATH" ou bien ".".

    Ici, tu indiques "-cp Fluid-efy.jar:lib/groovy/*". C'est donc là qu'il cherche la classe.
    Les deux noms fournis (le jar "Fluid-efy.jar" et les répertoires "lib/groovy/*") sont relatifs (ils ne commencent pas par "/").

    D'après ce que tu as mis dans le cron, le script "runFluid-efy.sh" se trouve dans "/opt/Fluid-efy".

    Peux-tu nous dire où se trouvent le jar "Fluid-efy.jar" et le répertoire "lib"?

    Tu peux les chercher par exemple avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find /opt/Fluid-efy -name Fluid-efy.jar
    find /opt/Fluid-efy -type d -path '*/lib/groovy'
    S'ils sont dans le dossier "/opt/Fluid-efy" contenant le script "runFluid-efy.sh", alors on peut utiliser la variable "$PROG_HOME" (sinon il faut faire autrement, en fonction de ta réponse à la question précédente...)

    2 possibilités:
    - comme suggéré par N_BaH, transformer la ligne java en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /usr/bin/java -Djavax.net.ssl.trustStore="$PROG_HOME/jssecacerts" -Djavax.net.ssl.trustStorePassword=changeit -cp $PROG_HOME/Fluid-efy.jar:$PROG_HOME/lib/groovy/* com.fluid_e.FXCEngine
    - comme indiqué par ton service technique, se placer dans le répertoire qui les contient, c'est-à-dire avant la ligne (n° 25) contenant l'appel de "/usr/bin/java", ajouter:
    mais cette dernière proposition peut avoir des conséquences sur le comportement du script, notamment si

    HTH

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2017
    Messages : 15
    Par défaut
    Merci jack-ft ! tu as vu juste.

    Il suffisait de repointer correctement vers les fichiers le jar et le répertoire lib

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/bin/java -Djavax.net.ssl.trustStore="$PROG_HOME/jssecacerts" -Djavax.net.ssl.trustStorePassword=changeit -cp $PROG_HOME/Fluid-efy.jar:$PROG_HOME/lib/groovy/* com.fluid_e.FXCEngine
    Ca marche parfaitement, merci encore

Discussions similaires

  1. lancer application via intranet
    Par protion dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 19/10/2007, 17h44
  2. DF dans MySQL via Cron
    Par ParMesSoins dans le forum Administration système
    Réponses: 6
    Dernier message: 03/10/2007, 10h31
  3. Comment lancer toutes les minutes ma commande via cron ?
    Par taffMan dans le forum Applications et environnements graphiques
    Réponses: 23
    Dernier message: 27/08/2007, 17h54
  4. lancement audacious via cron ou at : unable to open display
    Par asterogyre dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 11/02/2007, 16h12
  5. lancer OEM via le browser (10g sur linux)
    Par learn dans le forum Entreprise Manager
    Réponses: 6
    Dernier message: 20/09/2004, 17h04

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