Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/02/2024, à 17:39

Altau

commande dans une fonction qui arrête le script

Bonjour,

J'ai un script qui appelle une fonction selon un while sur un fichier en entrée qui fonctionne très bien jusqu'à ce que j'ajoute dans cette fonction la commande

ssh root@10.20.30.40 test -f $FIC && echo "$FIC trouvé sur le serveur" || echo "$FIC non trouvé sur le serveur"

Dès que j'ajoute cette commande, la fonction écrit le résultat et sort sans que le reste du script ne s'exécute, et en particulier la boucle.
Je ne comprends pas pourquoi.
Tout appel de ssh selon différents modes produit le même résultat.

Une idée ?

Merci d'avance.

Hors ligne

#2 Le 27/02/2024, à 18:05

Watael

Re : commande dans une fonction qui arrête le script

Une idée ?

sans le script ? non.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 27/02/2024, à 19:04

Altau

Re : commande dans une fonction qui arrête le script

Voici un script réduit à l'essentiel et qui ne fonctionne pas mieux.
Bien sûr, la commande ssh fonctionne correctement en interactif, il y a un jeu de clés ad hoc.

#!/bin/bash
function sauve-conteneur {
  DATEEXEC=`date +%c`
  FICSAUVDOC=backup_$CONTENEUR
  FIC="/home/rpi2/docker/$FICSAUVDOC-`date -I -d "14 days ago"`.tar"
  ssh root@91.121.79.151 test -f $FIC && echo "$FIC trouvé sur le serveur" || echo "$FIC non trouvé sur le serveur"
}

FICLOG=$(basename -s .sh $0).log
docker ps | sed '1d' | cut  -c 167- > liste-conteneurs-actifs.txt
sed -i 's/^ *//' liste-conteneurs-actifs.txt
#cat liste-conteneurs-actifs.txt >> $FICLOG

while read CONTENEUR ; do
   echo "sauvegarde du conteneur $CONTENEUR" >> $FICLOG
   sauve-conteneur
done < liste-conteneurs-actifs.txt

Contenu du fichier liste-conteneurs-actifs.txt :

zigbee2mqtt
duplicati
sms2mqtt
mosquitto
portainer
homeassistant
myiammeter

Résultat à l'exécution du script :

/home/rpi2/docker/backup_zigbee2mqtt-2024-02-13.tar non trouvé sur le serveur

Si j'enlève la ligne contenant le ssh, la boucle s'exécute complètement.

Hors ligne

#4 Le 28/02/2024, à 08:50

Hizoka

Re : commande dans une fonction qui arrête le script

Salut Question con, je présume que ça ne fonctionne pas non plus sans la fonction :

#!/bin/bash

FICLOG=$(basename -s .sh $0).log
docker ps | sed '1d' | cut  -c 167- > liste-conteneurs-actifs.txt
sed -i 's/^ *//' liste-conteneurs-actifs.txt
#cat liste-conteneurs-actifs.txt >> $FICLOG

while read CONTENEUR ; do
   echo "sauvegarde du conteneur $CONTENEUR" >> $FICLOG
  DATEEXEC=`date +%c`
  FICSAUVDOC=backup_$CONTENEUR
  FIC="/home/rpi2/docker/$FICSAUVDOC-`date -I -d "14 days ago"`.tar"
  ssh root@91.121.79.151 test -f $FIC && echo "$FIC trouvé sur le serveur" || echo "$FIC non trouvé sur le serveur"
done < liste-conteneurs-actifs.txt

Perso, je viens de teste la commande ssh dans une boucle et elle ne bloque pas.

Dernière modification par Hizoka (Le 28/02/2024, à 08:51)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 28/02/2024, à 10:19

Altau

Re : commande dans une fonction qui arrête le script

S'il n'y a pas d'appel de la commande ssh, la boucle fonctionne bien.
J'ai contourné le problème en remplaçant la boucle qui lit le fichier en une boucle de la sorte :

LISTE=`cat liste-conteneurs-actifs.txt`
for CONTENEUR in $LISTE; do
   echo "sauvegarde du conteneur $CONTENEUR" >> $FICLOG
   sauve-conteneur
done

Mais j'aimerais bien savoir pourquoi la boucle d'origine s'arrête à la première exécution.

Hors ligne