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 bash, Processus rsync, faire en sorte qu'il soit lancer 2 fois maximum


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut Script bash, Processus rsync, faire en sorte qu'il soit lancer 2 fois maximum
    Bonjour,

    Suite à mon script de rsync j'aimerais maintenant le lancer que deux fois maximum.
    Je m'exprime peut être mal je développe :

    Code pseudo-code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Si rsync est lancé 2 fois // donc d'après moi -eq 2 ,-gt 1 
    écrire rsync is running, exit
    else
    écrire rsync n'est pas lancé plus de deux fois

    Code actuel : (pour voir si rsync est déjà démarré, donc si il est déjà lancer je ne pas en lancer deux or j'aimerai justement deux et non 1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if pgrep -x "rsync" > /dev/null
    then
         echo "rsync is running, exit"; exit
    else
          echo "rsync is not running."
    fi
    Voila, merci d'avance pour vos solutions
    CDLT

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

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

    il faut lire le man de pgrep !

  3. #3
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Bonjour, conaissant déjà pgrep, je suis aller voir le man comme indiquer mais c'est ce qu'il me sembler aussi l'option permettant de compter les process en court est compte les process PARENTS ET ENFANTS.

    Sauf que aucune de ces solutions ne me permet de faire justement ce que je veux faire.
    CDLT

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    -c, --count
    Suppress normal output; instead print a count of matching processes. When count does not match anything, e.g. returns zero, the command will return non-zero value.
    il n'est pas fait mention du compte des parents.

  5. #5
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Oui, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if pgrep -c -x "rsync" -gt 2 
    then echo "is running", exit 
    else echo "not runnning"
    fi
    Ce qui retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pgrep: invalid process group t
    Et de plus il me dit que rsync n'est pas "running" donc c'est sur que ça ne marche car il y a deux rsync en cours... Je comprend pas...

    Code powershell pour ce que je veux sur bash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #Robocopy est en marche ou pas ?
    $programName = "robocopy"
    $isRunning = (Get-Process | Where-Object { $_.Name -eq $programName }).Count -gt 1
     
    if ($isRunning)
    {
    	echo "ROBOCOPY IS RUNNING, exiting..." ; exit
    }
    else 
    {
    	echo "ROBOCOPY IS NOT RUNNING !" 
    }
    Donc pour moi similaire à ce code en bash : j'écris les syntaxe comme je le pense donc si erreur (manque ; ou si il faut mettre $ signaler le moi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    progname="rsync"
    isruning=pgrep | grep rsync ($_.name -eq $progname).count -1
     
    if $isrunning...etc

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    -gt fait partie de la commande pgrep ???

  7. #7
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    est une comparaison. Ca veux dire plus grand.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si nana -gt (plus grand) 2 (que 2) donc...
    Donc enfaîte si rsync est lancer donc supérieur à deux fois...

    Je sais pas si c'est claire :/

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    une option n'est pas omnipotente : elle s'applique à une commande.
    en l'occurrence, -eq -ne -ge -gt... sont des options de la commande intégrée (builtin) test !
    en conséquence, pour considérer la sortie d'une commande, et non son état de sortie, il faut ajouter une substitution de commande que traitera cette commande test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test $(commande) -gt $valeur; then do_stuff; else do_else; ...; fi

  9. #9
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    commande='pgrep -c -x "rsync"'
            if [ $(commande) -gt $valeur ];
            then     echo "rsync is running, exit"; exit
            else     echo "rsync is not running."
            fi
    Mais je compare quelle valeur ? Je vois pas en quoi il peut voir que le process rsync tourne ou pas ???

    Me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ./backup_ganil_nfs.sh: ligne10: commande : commande introuvable
    rsync is running, exit

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    mais tu fais n'importe quoi ! et tu espères que ça va magiquement fonctionner ?

    d'abord, je trouve très moyen de mettre une commande dans une variable, mais si ensuite c'est pour ne pas développer cette variable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test $(pgrep -cx rsync) -gt 2; then...
    et, je te le dis avant que tu nous renvoies que le script sort une erreur err: `...' commande introuvable, tu dois remplacer les points de suspension par le reste de ton script.

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 139
    Par défaut
    Dans ton script, commande est un nom de variable. Pour accéder au contenu d'une variable, il faut l'"expanser"...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ $($commande) -gt $valeur ]
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    et si un autre processus (système ou utilisateur) a lancé un rsync en même temps ?

  13. #13
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Justement le but est de pouvoir lancer deux rsync en même temps mais pas plus de deux car dans mon crontab le script qui effectue rsync se lance tout les jours à 17h00 et ensuite une répétition toute les 30 minutes, il se relance. Sauf que si la sauvegarde n'est pas terminé des anciens volumes il ne faut pas que d'autre sauvegarde se lance donc j'aimerai me limiter à deux rsync pour éviter de saturé la bande passante.

  14. #14
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    J'ai enfin TROUVER !
    J'ai tout changé, j'ai changé de méthode ça me prenais trop la tête...

    Donc voici le code, qui marche !!! Je n'ai pas fais en fonction du process (rsync) mais plutôt sur les noms des volumes que je sauvegarde. Si deux noms de volumes sont la alors il y a deux rsync donc ne pas en lancer :

    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
    declare -A VOLS
    running_rsync=`pgrep -a rsync | cut -d ' ' -f 7`
     
    for rrsync in $running_rsync
    do
            VOLS[$rrsync]=1
            #echo $rrsync
     
    done
     
    for K in "${!VOLS[@]}"
    do
     
            echo $K
    done
     
    echo "${#VOLS[@]}"
     
    if [ "${#VOLS[@]}" -eq 2 ]; then
    echo ok
    else echo non
    fi
    Je passe en résolu... CDLT

  15. #15
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Excusez moi correction !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "${#VOLS[@]}" -gt 1 ]; then
    J'ai remplacé -eq 2 par -gt 1 car -eq donc égale sa ne me sert pas car je veux pas qu'il y'en ai deux à chaque fois bref vous avez compris... Et 1 car je ne vois pas pourquoi mais il ajoute 1 lui même je ne suis pas claire. En gros si je met 2 je peux en lancer 3 etc... donc ici 2 donc -gt 1.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    oh, ben, oui. pourquoi faire simple et efficace, quand on peut faire compliqué et inutile !?

  17. #17
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Houla trop philosophe pour moi ça

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut
    je ne vois pas en quoi if test $(pgrep -cx rsync) -gt 2; then... est prise de tête.

  19. #19
    Membre averti Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Par défaut
    Pas prise de tête mais dans le but rechercher je ne pense pas que ça allez m'amener à la solutions que j'ai trouver. Car en ayant justement essayer ça ne faisais pas comme je voulais. Après peut être que c'est moi qui n'ai pas compris comment faire.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 738
    Par défaut contrôler le nombre d'instances d'un programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nb2procSrsync=$(pgrep -cx rsync)
    echo "il y a $nb2procSrsync instance de rsync en cours"
    test $nb2procSrsync -gt 2 && { echo "je quitte"; exit;}
    # ou bien
    # test $(pgrep -cx rsync) -gt 2 && { echo "je quitte"; exit;}
    echo "le script continue"
    voilà qui fait le job demandé.
    après si, depuis la demande initiale, le besoin a évolué...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tuer des processus via un script bash
    Par RTK45 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 19/04/2013, 00h16
  2. faire un uptime d'un serveur jeu en script bash
    Par kazylax dans le forum Linux
    Réponses: 0
    Dernier message: 04/08/2009, 18h02
  3. comment faire en sorte qu'un script ne s'ouvre pas en avant-plan
    Par fourchette dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/02/2009, 09h57
  4. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 23h38
  5. Problème script Bash
    Par Sphost dans le forum Linux
    Réponses: 10
    Dernier message: 26/07/2005, 10h56

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