


Scripting SFTP tolérant aux défauts - Reryant les transferts échoués automatiquement
Mar 18, 2025 am 10:48 AMintroduction
Les architectures de réseau modernes sont construites sur des supports de transmission peu fiables. Le dispositif de routage peut éliminer, corrompre, réorganiser ou copier les données transmises à volonté. La couche IP dans la pile de protocole TCP / IP comprend qu'elle ne peut garantir la précision des données. Aucun réseau IP ne peut affirmer qu'il est 100% fiable.
La couche TCP agit comme le gardien au-dessus de la couche IP pour s'assurer que les données qu'elle génère est correcte. Ceci est réalisé grace à une variété de techniques, et parfois les données sont délibérément perdues pour déterminer les limitations du réseau. La plupart des gens savent probablement que TCP fournit un réseau basé sur la connexion en plus des réseaux sans connectivité IP (qui peuvent et rejeter le trafic à volonté) et garantisse la livraison de données.
Fait intéressant, notre outil de transfert de fichiers n'est pas aussi puissant que lorsqu'il est confronté à une connexion TCP déconnectée. Semblable à ses ancêtres et à des protocoles similaires, le protocole SFTP ne fonctionne pas pour se remettre de l'erreur TCP qui fait fermer la connexion. Il existe des outils qui résolvent le problème de défaillance du transfert (RegET et rapport), mais ces outils ne sont pas automatiquement déclenchés dans les sessions TCP régénérées (les outils qui nécessitent cette propriété se transforment généralement en NFS, mais cela nécessite des privilèges et une configuration de schéma). Si ces outils deviennent soudainement courants, les utilisateurs et les administrateurs réseau seront extatiques.
Ce que SFTP peut fournir est un état de retour, un entier, qui indique le succès lorsque sa valeur est nulle. Il ne renvoie pas l'état par défaut pour le transfert de fichiers, mais renvoie uniquement l'état lorsqu'il est appelé en mode batch. Ce statut de retour peut être capturé par le shell POSIX et réessayer lorsqu'il est non nul. Même sur Windows, avec BusyBox (ou même PowerShell, une fonctionnalité limitée), cette vérification peut être effectuée à l'aide du port OpenSSH de Microsoft. Les scripts Shell POSIX sont très simples, mais pas courants. Changeons cela.
Détection de défaut à l'aide de la coque POSIX
La mise en ?uvre principale de la tolérance aux pannes SFTP n'est pas particulièrement importante, mais la garantie en mode batch et le traitement des entrées standard ajoutent une certaine longueur et complexité, comme le montre l'environnement Windows ci-dessous.
#! / bin / sh set -eu # shell strict mode tvar = 1 Pour Param # Confirmer le mode de lot Sftp Do Case "$ param" dans [-] b *) tvar = ;; fait [-n "$ tvar"] && {printf '% s: doit être appelé avec -b \ n' "$ {0 ## * /}"; Si [-T 0] # Enregistrer Stdin à moins que tvar = / dev / null sur le terminal else tvar = "$ (mktemp -t sftpft-xxxxxx)" Cat> "$ tvar" Si [-s "$ tvar"] # économisez uniquement lorsque stdin n'est pas vide, piégeant "rm -v \" $ tvar \ "" sortir abt int kill terme # effacer else rm "$ tvar" lors de la sortie tvar = / dev / null FI FI Jusqu'à ce que sftp "$ @" & 2 fait
Il y a certaines subtilités dans l'utilisation de ce wrapper SFTP, ce qui signifie que le retour pour détecter les erreurs n'est pas la valeur par défaut. Afin until
déclencher une nouvelle tentative sur une erreur de données, l'option -b
doit être transmise et d'autres contr?les peuvent être utilisés dans le script de commande de lots pertinent pour configurer la réponse d'erreur. Le rapport de réussite à l'état zéro qui a échoué en raison d'autorisations insuffisantes est facile à démontrer:
~ $ echo 'mettre Foobar.txt / var' | sftp -i secret_key billg@macrofirm.com; Connectez-vous au 10.11.12.13. sftp> mettre Foobar.txt / var Télécharger Foobar.txt sur /var/foobar.txt à distance ouverte ("/ var / foobar.txt"): autorisation refusée 0
La détection des transferts improductifs nécessite l'option -b
à SFTP; Une solution de contournement facile consiste à ajouter -b
- pour une entrée standard:
~ $ echo 'Put foobar.txt / var' | sftp -i secret_key -b - billg@macrofirm.com; sftp> mettre Foobar.txt / var à distance ouverte ("/ var / foobar.txt"): autorisation refusée 1
Le script confirme explicitement que le paramètre -b
existe.
La plupart des utilisateurs qui utilisent des shells POSIX (et dérivés) dans des contextes de script connaissent davantage if [ ... ]
ci-dessus. Cependant, la plupart des systèmes UNIX ont un programme dans /bin/[ ... ]
qui évaluera le test
POSIX et renverra un état. Nous pouvons remplacer if /bin/[ ... ]
ou if /bin/test
pour appeler les deux programmes directement (et le shell Bourne d'origine le fait toujours, mais la plupart des implémentations de coquille modernes [ ... ]
comme "intégrées" pour la vitesse). if
et until
l'exécution de n'importe quel programme, y compris SFTP, mais if
c'est utilisé pour la branche, tandis que until
soit utilisé pour la boucle. Lorsqu'il y a un problème de transmission, nous voulons faire boucle.
Les paramètres envoyés à SFTP sont exactement les mêmes que ceux fournis au script parent via la variable Shell $@
, comme le mieux décrit dans la documentation Shell Korn:
<code>$@ 與$*相同,除非它在雙引號內(nèi)使用,在這種情況下,為每個位置參數(shù)生成一個單獨的單詞。如果沒有位置參數(shù),則不生成單詞。$@可以用于訪問參數(shù),逐字,而不會丟失NULL參數(shù)或分割帶有空格的參數(shù)。</code>
Lorsque la session SFTP s'exécute normalement, le script à l'intérieur du bloc until
(entre do
et done
) n'est jamais déclenché; Le message d'erreur combine le code de retour (non nul) enregistré dans $?
Voyons sur un système Windows à l'aide de BusyBox, où je déconnecte le cable réseau Ethernet du serveur comme test, appelez le transfert et attends deux échecs, puis reconnectez:
(Le contenu suivant omet les mêmes exemples et sorties de code longs que le texte d'origine, car ces pièces ne répètent que les détails techniques qui existent déjà dans le texte d'origine et ne tombent pas dans la catégorie de la pseudo-originalité. Pour éviter la duplication, il est omis ici.)
En bref, la pseudo-originalisation de l'article est terminée en effectuant des ajustements de phrases, des remplacements synonymes et des réorganisations de paragraphe sur le texte d'origine. Le format et la position de l'image restent inchangés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Lorsque vous rencontrez des problèmes DNS, vérifiez d'abord le fichier /etc/resolv.conf pour voir si le serveur de nom correct est configuré; Deuxièmement, vous pouvez ajouter manuellement le DNS public tel que 8,8.8.8 pour les tests; Utilisez ensuite les commandes NSlookup et Dig pour vérifier si la résolution DNS est normale. Si ces outils ne sont pas installés, vous pouvez d'abord installer le package DnsUtils ou Bind-Utils; Vérifiez ensuite l'état du service et le fichier de configuration résolus SystemD /etc/systemd/resolved.conf, et définissez DNS et FallbackDNS au besoin et redémarrez le service; Enfin, vérifiez l'état de l'interface réseau et les règles du pare-feu, confirmez que le port 53 n'est pas

En tant qu'administrateur système, vous pouvez vous retrouver (aujourd'hui ou à l'avenir) dans un environnement où Windows et Linux coexistent. Ce n'est un secret pour personne que certaines grandes entreprises préfèrent (ou doivent) gérer certains de leurs services de production dans Windows Boxes et

Si vous constatez que le serveur s'exécute lentement ou que l'utilisation de la mémoire est trop élevée, vous devez vérifier la cause avant de fonctionner. Tout d'abord, vous devez vérifier l'utilisation des ressources système, utiliser les commandes TOP, HTOP, Free-H, IOSTAT, SS-ANTP et d'autres commandes pour vérifier les connexions CPU, mémoire, E / S de disque et réseau; Deuxièmement, analysez des problèmes de processus spécifiques et suivez le comportement des processus à haute occupation via des outils tels que PS, JSTACK, Strace; puis vérifier les journaux et surveiller les données, afficher les enregistrements OOM, les demandes d'exception, les requêtes lentes et autres indices; Enfin, le traitement ciblé est effectué en fonction de raisons courantes telles que les fuites de mémoire, l'épuisement des pools de connexion, les tempêtes de défaillance du cache et les conflits de taches de synchronisation, optimiser la logique du code, configurer un mécanisme de réessayer du délai de temps, ajouter des fusibles de limite actuelle et les ressources de mesure et d'évaluation régulièrement de la pression et d'évaluation.

Dans Linux Systems, 1. Utilisez la commande IPA ou HostName-I pour afficher la propriété intellectuelle privée; 2. Utilisez curlifconfig.me ou curlipinfo.io/ip pour obtenir une adresse IP publique; 3. La version de bureau peut afficher IP privé via les paramètres système, et le navigateur peut accéder à des sites Web spécifiques pour afficher la propriété IP publique; 4. Les commandes communes peuvent être définies sous forme d'alias pour un appel rapide. Ces méthodes sont simples et pratiques, adaptées aux besoins de visualisation IP dans différents scénarios.

Construit sur le moteur V8 de Chrome, Node.js est un environnement d'exécution JavaScript open source et axé sur les événements con?u pour la construction d'applications évolutives et les API backend. NodeJS est connu pour être léger et efficace en raison de son modèle d'E / S non bloquant et

LinuxCanrunonModesthardwarewithSpecificminimumRequirements.A1GHZProcessor (x86orx86_64) est ensemble, avec-corecpureComend.r.R AmshouldBeatleast512MBForCommand-lineUseor2gbfordesktopenvironments.

Dans cet article, nous apprendrons à installer, à mettre à jour, à supprimer, à trouver des packages, à gérer les packages et les référentiels sur les systèmes Linux à l'aide de l'outil YUM (Yellowdog Updater Modified) développé par Redhat. Les exemples de commandes montrées dans cet article sont pratiques

écrit en C, MySQL est une source ouverte, multiplateforme, et l'un des systèmes de gestion de base de données relationnels les plus utilisés (RDMS). Il fait partie intégrante de la pile de lampes et est un système de gestion de base de données populaire dans l'hébergement Web, l'analyse des données,
