Tout d'abord bonjour.
Je débute totalement sous linux, je suis en bts et mon projet se deroule sous cet OS.
Je ne demande aucunement qu'on me fasse mon travail biensur ^^ mais juste qu'on m'aide.
Je dois réaliser un script en bash qui appelle plusieurs numéros.
Le numéro répond alors il y a l'envoie d'un fichier.
Des que le fichier est envoyé le script continue et numérote le prochain numéro de mon tableau.
Si le numéro répond alors tout se déroule sans problème et le script continue.
Mais si le numéro est faux, ou occupé, ou pas de décrochage alors le script se ferme et ne tente pas la numérotation de la suite de mon tableau.
En gros j'aimerais savoir comment faire pour que mon script ne s'arrète pas des lors qu'il y a une erreur.
Est ce qu'il existe quelque chose du même type que "Try > Catch" mais en bash?
Voici déja ce que j'ai fait:
#!/bin/bash
#--- Déclaration ---
tel=(542 10 0) #0 pour signaler la fin
dateuh=`date`
ligne=" "
#--- Fonction qui compte le nombre de telephone du tableau ---
nb=0 #Déclaration du nombre de tel à 0
while [ ${tel[$nb]} != 0 ] #Tant que ce qu'il y a dans le tableau est different de 0
do #Faire
nb=$((nb+1)) #nb = nb + 1
done
#--- Fonction qui passe les appels ---
for (( i=0; i < nb; i++ )) #Boucle jusqu'à la fin des numéros
do #Faire
echo Connexion vers... ${tel[$i]} #Affiche Connexion vers... numéro
/usr/sbin/pppd connect "/usr/sbin/chat -v '' ATZ OK ATDT,${tel[$i]} CONNECT ''" /dev/ttyS0 38400 &
pid_connexion=$!
sleep 35
ping -c 1 192.168.0.9
if [ $? == '0' ] #Si le resultat obtenue est 0
then
succes_connexion="[SUCCES]: La connexion vers ${tel[$i]} a reussi @ $dateuh"
echo $succes_connexion >> etat.log
ncftpput -u user -p pass -t 60 -V 192.168.0.9 /home/testS/ /home/testC/test.txt
sleep 20
if [ $? == '0' ]
then
succes_envoie="[SUCCES]: L'envoie vers ${tel[$i]} a reussi @ $dateuh"
echo $succes_envoie >> etat.log
echo $ligne >> etat.log
kill $pid_connexion &
else
echec_envoie="[SUCCES]: L'envoie vers ${tel[$i]} a échoué @ $dateuh"
echo $echec_envoie >> etat.log
echo $ligne >> etat.log
fi
else
erreur_connexion="[ERREUR]: La connexion vers ${tel[$i]} a échoué @ $dateuh"
erreur_envoie2="[ERREUR]: L'envoie vers ${tel[$i]} a DONC échoué @ $dateuh"
echo $erreur_connexion >> etat.log
echo $erreur_envoie2 >> etat.log
echo $ligne >> etat.log
fi
done
# ping sans timeout
Posté par daggett . Évalué à 2.
En effet chez moi, un "ping -c 1 machine" d'une machine morte attend infiniment la réponse. Ajoute un délai maximal (par exemple "-w 10" pour attendre 10 secondes) pour etre sûr d'avoir un code de retour dans tous les cas.
Attention, a un moment aussi tu testes le code de retour de ncftp alors qu'il y a une commande sleep entre-temps: tu testes alors le code de sleep, pas du ftp. Stocke-le dans une variable temporaire avant d'appeler le sleep.
[^] # Re: ping sans timeout
Posté par Fr3nChY . Évalué à 1.
Au sujet du ncftp j'ai remarquer cette apres midi aussi qu'il y avait un probleme dû au sleep. :p
J'ai résolu ce probleme, j'ai d'ailleurs fait exactement comme tu l'as dit. lol
Pour ta solution avec le -w 10 je testerais demain et je te tiendrais au courant.
Par contre j'ai un autre probleme maintenant, apres l'envoie du fichier et la recomposition d'un autre numéro il me dit que le pid bloque le port serie (ttys0) et donc le script plante. ^^
Comment je peux tuer ce processus?
Je te tiendrais au courant demain.
Merci dagget
[^] # Re: ping sans timeout
Posté par daggett . Évalué à 2.
Donc le signal de terminaison est envoyé, et pppd fait son travail de fin propre (il ferme la connexion, etc). Mais ton script se poursuit en parallele. Donc le nouveau pppd se lance alors que l'ancien n'est pas encore fini.
Lance ta commande kill normalement, et attend un peu, au besoin teste que l'ancien pid a enfin disparu, avant de poursuivre ta boucle.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.