2016-03-15 2 views
0

J'ai un script OpenSSH sftp qui transfère les fichiers d'un serveur SFTP (Solaris) au serveur d'applications (Linux). Ici, le scénario est le transfert qui se passe à partir d'un emplacement différent et les mêmes fichiers sont transférés sauvegarde à l'emplacement différent du serveur SFTP. Mais si l'un des transferts échoue en raison d'un fichier n'est pas disponible, il ne poursuit pas les commandes sftp restantes. Au lieu de cela, il sort juste du code. Voici le script.Le script sftp échoue lorsque l'une des instructions sftp échoue sous Linux

export SSHPASS=******* 
/usr/local/bin/sshpass -e sftp -oPort=22 -oBatchMode=no -b - [email protected] << ! 

cd /home/rkwlahtt/Inbound 
mget *.* 
rm *.* 
cd /home/rkwlahtt/Inbound/Adhoc 
mget *.* 
rm *.* 
cd /home/rkwlahtt/Archive/Inbound 
mput *.TXT 
mput *.txt 
cd /home/rkwlahtt/Archive/Adhoc 
mput *.xlsx 
bye 
! 

Ici, dans le script ci-dessus quand je suis en train de mget du /home/rkwlahtt/Inbound dossier et si le fichier n'existe pas, il vient juste de sortir du code sftp au lieu d'aller à commande suivante qui est cd /home/rkwlahtt/Inbound/Adhoc et mget. C'est la même situation pendant que mput aussi.

C'est la première fois que nous transférons à partir d'un emplacement différent dans le même code. Et cela crée un problème dans notre transfert.

Veuillez me faire savoir ce qui peut être fait pour résoudre ce problème.

Répondre

0

Vous pouvez supprimer une abort en cas d'erreur sur une base par commande en utilisant un préfixe -:

-mget *.* 

Une autre option est de supprimer le commutateur -b -.

Le commutateur provoque l'abandon après toute défaillance.

Même sans le commutateur, vous pouvez toujours alimenter les commandes en utilisant la redirection d'entrée, comme vous le faites.

Bien que vous ayez besoin de vous assurer qu'aucune commande ne demandera d'entrée. Comme alors une partie de votre commande sera utilisée comme entrée au lieu d'être exécutée.

+0

Cool. Ça a marché. Alors, que signifie exactement le -b? Je pensais que -b était pour le fichier batch. Et cette instruction ligne /usr/local/bin/sshpass -e sftp -oPort = 22 -oBatchMode = non -b - [email protected] < user3441224

+0

Le '-b' fait deux choses. D'abord, il active un mode de traitement par lots (= abandon de toute erreur), ensuite il définit un fichier de script. Sauf lorsque vous utilisez '-' au lieu d'un nom de fichier script, auquel cas les commandes sont lues à partir de l'entrée standard, quelle est la valeur par défaut. Vous n'avez pas besoin du second effet (puisque vous utilisez '-' de toute façon) et vous ne voulez pas le premier. Voir la page de manuel 'sftp': https://www.freebsd.org/cgi/man.cgi?query=sftp&sektion=1 –

+0

bien .. Merci beaucoup Martin. – user3441224