#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