Rechercher : dans
Par :

Shell et Code retour d'une commande ftp

Dernière réponse le 14 oct 2009 à 11:43:09 glwadys, le 6 déc 2005 à 16:26:43 
 Signaler ce message aux modérateurs

Bonjour à tous,

Je suis nouvelle sur le forum et en développement UNIX et j'aimerai avoir votre aide.
Je travaille sur une script sous ksh qui effectue un ftp et j'ai besoin d'alerter l'utilisateur au cas où le transfert de fichier ne s'effectue pas correctement (par exemple impossibilité de se connecter en ftp à la machie distante).
Mon problème est que la variable d'environnement considère apparement le code retour du EOF et non pas celui du FTP.
Comment recupérer le code retour de la fonction ftp. Mon code est décrit ci-après; même quand la connection echoue, le message transfert ok s'affiche:

ftp -in ${PILMARGE_SERVEUR} << EOF
user ${SC_ALIAS_LOGIN} ${SC_ALIAS_PWD}
bin
cd ${PILMARGE_DIR}
put ${PIL_DATA_SEND}/ps_affaire_t1.csv ps_affaire_t1.csv

EOF
CR=$?
case $CR in
0) msglog ${PIL_LOG_NIV1} 0 0122 "Fin de transfert FTP correct"
;;
*) msglog ${PIL_LOG_NIV1} 3 3122 "ERREUR $CR lors du transfert FTP - Arret du traitement"
;;

Merci pour votre aide
esac

Configuration: PC/UNIX

Meilleures réponses pour « shell et Code retour d'une commande ftp » dans :
Utilisation de la commande ftp Voir Le protocole FTP FTP (File Transfer Protocol) est un protocole, c'est-à-dire un langage standard de communication entre deux machines, permettant à des machines de types différents (ou dont le système d'exploitation est différent) de transférer des...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Se connecter à un serveur FTP en mode Ms-Dos VoirLa commande ftp permet de se connecter à un serveur FTP en ligne de commande. Certaines options de cette commande permettent d'automatiser la connexion en fournissant une liste de commandes contenues dans un fichier texte : ftp -i ...
[Shell] Accès aux dernières commandes de l'historique VoirLe shell Linux/Unix regorge de fonctionnalités permettant de gagner du temps. Ainsi, il est possible de remonter dans l'historique des dernières commandes grâce aux flèches de navigation en appuyant sur la flèche du haut. Mais il y a moyen...
Les commandes FTP VoirLe protocole FTP FTP (File Transfer Protocol) est un protocole, c'est-à-dire un langage standard de communication entre deux machines, permettant à des machines de types différents (ou dont le système d'exploitation est différent) de...
Le protocole FTP (File Transfer Protocol) VoirIntroduction au protocole FTP Le protocole FTP (File Transfer Protocol) est, comme son nom l'indique, un protocole de transfert de fichier. La mise en place du protocole FTP date de 1971, date à laquelle un mécanisme de transfert de...
Attaques par injection de commandes SQL VoirInjection de commandes SQL Les attaques par injection de commandes SQL sont des attaques visant les sites web s'appuyant sur des bases de données relationnelles. Dans ce type de sites, des paramètres sont passés à la base de données sous forme...

1

hssissen, le 6 déc 2005 à 17:15:56

Une façon de faire (existe +ieurs) est de rediriger si problemes vers un fichiers du genre:

ftp -n $HOST > /tmp/ftp.ok 2> /tmp/ftp.no <<fin
bla bla ...
fin
# etat de sortie
EXITSTATUS=$?

if [ $EXITSTATUS != "0" ]
then
# message_erreur
fi

Répondre à hssissen

2

glwadys, le 6 déc 2005 à 17:41:13

Bonjour

Merci pour ta réponse.

Lorsque je fais ainsi (recupération du code erreur avec CR=$? ) le message qui s'affiche est toujours OK même lorsque la connection ftp échoue. (Je suppose que la variable d'environnement dans ce cas contient le code de retour de EOF... ?).
Par contre, je vais utiliser ton idée et tester si le fichier ftp.no a une taille nulle.

Répondre à glwadys

3

hssissen, le 6 déc 2005 à 19:30:25
  • +1

Tu peux encore essayer avec ncftpput (fourni avec ncftp) et tu fais:

#!/bin/sh

ncftpput -u user -p pass $HOTE /REP_DISTANT /REP_LOCAL/ton_script.sh

if [ "$?" = "0" ] ; then
echo "OK"
else
echo "NOK"
fi

Ça devrait marcher avec ça. L'inconvénient c'est qu'avec le ncftpput il faut transférer un répertoire entier, du coup, tu dois ouvrir autant de connexion que de fichiers à transferer. C'est pas pratique, à moins que tu regroupe le moins possible de fichiers a transférer dans un reprtoire, car le temps de connexion sera d'autant plus lent que le nbre de fichiers a transferer est plus grand!

Répondre à hssissen

6

glwadys, le 7 déc 2005 à 10:07:33

Bonjour,

J'ai lu le man du ncftpput et si j'ai bien compris c'est pour le transfert des scripts?
Je vais essayer la seconde solution.

Merci pour ta réponse

Répondre à glwadys

4

hssissen, le 6 déc 2005 à 19:41:33

Autre alternative (celle-là je ne l'ai pas essayé!):

lftp -e 'cd /; mput toto; exit' ftp://toto:toto@localhost/; echo $?

Répondre à hssissen

5

crabs, le 6 déc 2005 à 21:48:41

Salut,
Le status de ftp n'est pas représentatif de la réussite ou pas des commandes
ftp. Pour cela il faut analyser les réponses et en particulier les codes de
réponses 550, 200, 120, etc...
Mon client ftp, si il arrive à contacter le serveur ftp, retourne toujours
succès même si le login se passe mal.
Pour connaître la signification des codes et essayer de savoir si tout est ok
se reporter à la RFC de FTP (en anglais) et en particulier le chapitre 4.2 :
http://www.faqs.org/rfcs/rfc959.html
..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

7

glwadys, le 7 déc 2005 à 10:09:44

Bonjour

Merci pour ta réponse.
En lisant le lien j'en ai appris plus sur le protocole FTP. Toutefois, j'aurais une question (qui semblera peut être stupide) : comment recupérer le code de retour du FTP?

Répondre à glwadys

8

crabs, le 7 déc 2005 à 21:12:54

Salut,
J'ai testé sous Linux (slackware 10.1), le $? vaut toujours 0, même si le
serveur n'existe pas ...
Pour l'analyse ses codes de retour des commandes ftp, il faut analyser la sortie
standard du processus et rechercher ces fameux codes et vérifier qu'ils
correspondent bien à ce que tu attends. Là il faut jouer avec du grep, du awk
ou du perl.

Y a peut-être les commandes ncftpget et ncftpput qui donnent un status ($?)
plus exploitable.
A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

9

glwadys, le 9 déc 2005 à 13:44:24

Merci pour votre aide.

Je ne pouvais modifier tout mon code donc j'ai gardé la première solution pour récuperer les éventuelles erreurs rencontrées et faire le test.

Répondre à glwadys

10

 zx6r, le 8 aoû 2007 à 16:10:47
  • +1

J ai trouve l astuce suivante :

- recupere les status du mode verbose dans un fichier
- tester si le transfert c est bien deroulé (status 266)

ftp -n $SERVER > rapport 2>rapport_err <<fin
quote user $USER
quote pass $USERMDP
verbose
cd /tmp
put $FICHIER
bye
fin

result=`cat rapport|grep 226|wc -l`
echo $result
if [ $result = '0' ]
then
echo "Erreur de transfert"
else
echo "Transfert termine"
fi

Répondre à zx6r