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 Shell qui ne démarre pas toutes les commandes


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Par défaut Script Shell qui ne démarre pas toutes les commandes
    Bonjour
    J'ai un script shell , qui doit vérifier si des services sont démarrés , sinon il les démarre , le problème est que le script ne démarre que les deux premiers services, et ignore les autres suivants , est-ce-que quelqu'un pourrait me dire pourquoi ??

    voici le script et le fichier config :

    Script a executer:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    \#!/bin/bash
     
    #startService
    #arg1 service path
    #arg2 service command
    #arg3 service args
    startService(){
            echo "Starting......"
            echo $1
            echo $2
            echo $3
            cd ${1}
            eval ${2} ${3} &
            #cd -
            #Checking if the service is successfully started
            echo "Started!"
    }
     
    #Check service method
    #arg1 the service configuration string
    #arg2 the current node type A or P
    checkService(){
            #echo $1
            #echo $2
            #Split the configuration string
            IFS=',' read -ra SERVICECONF <<< "$1"
            #Get Service PID
            PID=$(pgrep -f "${SERVICECONF[4]}")
            #echo ${SERVICECONF[1]}
            #echo $PID
            #Check if the serivce is running
            if [ -z $PID ];
            then
                    echo "Service ${SERVICECONF[0]} is NOT running"
                    #Check if the service is eligible to be started according to the service type and the node type
                    #NODETYPE == A && service type == A-A (eligible)
                    #NODETYPE == A && service type == A-P (eligible)
                    #NODETYPE == P && service type == A-A (eligible)
                    #NODETYPE == P && service type == A-P (NOT eligible)
                    #echo +++++++++++++++
                    #echo $2
                    #echo ${SERVICECONF[4]}
                    #echo +++++++++++++++
                    if [ $2 = "A" -a ${SERVICECONF[5]} = "A-A" ] || \
                            [ $2 = "A" -a ${SERVICECONF[5]} = "A-P" ] || \
                            [ $2 = "P" -a ${SERVICECONF[5]} = "A-A" ]; then
                            echo "Service ${SERVICECONF[0]} is eligible to be restarted"
                            startService ${SERVICECONF[1]} ${SERVICECONF[2]} ${SERVICECONF[3]}
                    else
                            echo "Service ${SERVICECONF[0]} is NOT eligible to be restarted"
                    fi
            else
                    echo "${SERVICECONF[0]} RUNNING"
    		if  [ $2 = "P" -a ${SERVICECONF[5]} = "A-P" ]; then
                            echo "${SERVICECONF[0]} is Active-Passive server and shouldn't be running on a passive node"
                            echo "Killing ${SERVICECONF[0]}"
                            kill $PID
                    fi
            fi
    }
     
    echo "Starting at $(date)"
    #check the arguments
    if [ "$#" -ne 1 ]; then
       echo "The argumants should have the path to the services configuration file only";
       exit;
    fi
    configFile=$1
    IFS=''
    servicesList=()
    #Reading the config file lines into array
    while read line; do
        configurationList+=($line)
    done < $configFile
     
    IFS='=' read -ra NODECONF <<< "${configurationList[0]}"
    NODETYPE=${NODECONF[1]}
    echo $NODETYPE
     
    for ((i = 1; i < ${#configurationList[@]}; ++i)); do
            #echo $i
            echo -----------------------
            checkService ${configurationList[i]} ${NODETYPE}
    done
    echo "Done"
    Fichier Config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NodeType=A
    IOT spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.iot.dataprocessor.IoTDataProcessor ProcessDataSparkJob.jar,iot.properties &> /DATA/apps/ProcessDataSparkJob/iot_run.log &,com.ocp.jfc2.iot.dataprocessor.IoTDataProcessor,A-P
    Plant spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/plant_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    JFC4 spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,/DATA/apps/ProcessDataSparkJob/JFC4/ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/JFC4_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    JFC3 spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,/DATA/apps/ProcessDataSparkJob/JFC3/ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/JFC3_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    JFC1 spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,/DATA/apps/ProcessDataSparkJob/JFC1/ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/JFC1_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    SIEMENS spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,/DATA/apps/ProcessDataSparkJob/SIEMENS/ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/SIEMENS_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    GE spark job,/DATA/apps/ProcessDataSparkJob/,/DATA/apps/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor ProcessDataSparkJob.jar,/DATA/apps/ProcessDataSparkJob/GE/ProcessAndFilterDataJobs_plant.properties &> /DATA/apps/ProcessDataSparkJob/GE_run.log &,com.ocp.jfc2.plant.dataprocessor.PlantDataProcessor,A-P
    Merci d'avance

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

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

    ton script est trop compliqué.
    tu as commencé à le coder sans écrire d'algorithme avant ?

    il faut respecter le KISS principle, et simplifier :
    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    tantQue lire ligne fichierConf
    faire
        si nbLigne == 1
        alors
            nodeype=ligne
        autre
            décoper ligne morceauxLigne
            pgrep morceauxLigne[n] || executer morceauxLigne[n]
        finSi
    finTantQue
    en gros, n'est-ce pas.
    mais ça ne doit pas être beaucoup plus compliqué.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre très actif
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Par défaut
    Bonjour,
    c'est pas moi qui a écrit ce script , c'était la personne que administré la plateforme avant moi , et a cette époque là il y'avait juste les deux services mais après on a ajouté d'autres services , et pour les ajouter au script et pouvoir les démarrer automatiquement , je voulais les ajouter au même script , mais ça n'a pas marché comme tu vois

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    Si le procédé ne va pas au bout, c'est souvent qu'il a planté. À toi de déboguer, et trouver à quel moment ça coince.

  5. #5
    Membre très actif
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Par défaut
    Je n'ai aucune notion en script Shell c'est pour ça je suis venu consulter les experts .

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    outre son inutile complexité, le script est syntaxiquement correct : il s'exécute sans autres erreurs que les dossiers et fichiers spécifiés dans le fichier de conf, qui ne sont pas trouvés - normal.

    les jar fonctionnent quand ils sont exécutés "à la main" ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Remove item qui ne fonctionne pas à tout les coups ?
    Par Elharion dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/02/2012, 18h26
  2. TRegistry qui ne fonctionne pas à tout les coups
    Par davels dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/05/2011, 02h00
  3. Un slot qui ne récupère pas toutes les données
    Par bilou_2007 dans le forum Débuter
    Réponses: 0
    Dernier message: 18/04/2011, 22h03
  4. [AC-97] Une requête étrange qui n'affiche pas toutes les entrées
    Par ZoliveR dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/11/2010, 11h58
  5. Réponses: 6
    Dernier message: 26/04/2010, 14h42

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