Le besoin est simple : vous voulez savoir quand de nouveaux fichiers apparaissent sur un serveur FTP distant, et vous voulez en faire quelque chose - les télécharger, les traiter, déclencher un autre flux de travail. Le problème, c'est que les serveurs FTP n'envoient pas de notifications. Ils attendent qu'on leur pose des questions.
Il y a deux façons de résoudre ça. La première nécessite le Terminal, des connaissances en scripting shell, et d'accepter que les choses planteront silencieusement. La seconde ne requiert rien de tout cela.
La méthode difficile : scripts shell et cron
Si vous demandez à un admin système comment surveiller un dossier FTP, la première réponse est généralement une variante de lftp - un client FTP en ligne de commande - combiné à un cron job ou un agent launchd qui l'exécute selon un calendrier.
La configuration typique ressemble à ceci. D'abord, un script shell qui utilise lftp pour synchroniser le dossier distant vers un dossier local :
#!/bin/bash
# telecharger-depuis-ftp.sh
lftp -u utilisateur,motdepasse ftp.exemple.com << EOF
mirror --only-newer --no-recursion /dossier/distant /Users/vous/Téléchargements/ftp-watch/
quit
EOF
Puis on le programme avec une entrée cron (crontab -e) pour l'exécuter toutes les cinq minutes :
# Synchronisation FTP toutes les 5 minutes
*/5 * * * * /Users/vous/scripts/telecharger-depuis-ftp.sh >> /tmp/ftp-sync.log 2>&1
Ça fonctionne. Si tout est correctement configuré et le reste, ça vérifie le serveur toutes les cinq minutes et télécharge ce qui est nouveau.
Mais cette approche pose de vrais problèmes :
- Aucune notification. Les fichiers arrivent dans le dossier - vous ne le savez pas jusqu'à ce que vous vérifiez manuellement.
- Échoue silencieusement. Si le mot de passe change, le serveur déménage, ou la connexion réseau flanche, le script plante sans bruit. Vous l'apprenez quand quelqu'un demande pourquoi les fichiers ne sont pas arrivés.
- Aucune interface. Déboguer nécessite de lire des fichiers journaux. Vérifier le statut nécessite de lancer des commandes.
- Maintenance requise. Les mises à jour de macOS cassent parfois les configurations cron ou launchd. Les identifiants doivent être mis à jour dans des scripts shell en texte clair.
- Aucune gestion des erreurs. Un téléchargement partiel ou un timeout serveur produit une erreur dans le journal - si vous le lisez.
Pour un développeur à l'aise dans le terminal qui préfère le code aux outils graphiques, c'est acceptable. Pour tout le monde - et pour les flux de travail où la fiabilité et le feedback comptent - c'est le mauvais outil.
La méthode simple : FTPull
FTPull est une application macOS qui surveille des dossiers FTP distants et télécharge automatiquement les nouveaux fichiers. C'est une interface graphique autour du même concept fondamental - le polling périodique du serveur - mais avec tous les problèmes de l'approche par script résolus.
Pour commencer à surveiller un dossier FTP :
- Installez FTPull et ouvrez-le depuis votre dossier Applications. Il ajoute une icône à votre barre de menu.
- Ouvrez les Préférences et ajoutez une nouvelle connexion : nom d'hôte, port, nom d'utilisateur, mot de passe, protocole (FTP/SFTP/FTPS).
- Définissez le chemin du dossier distant - le répertoire sur le serveur que vous souhaitez surveiller.
- Définissez un dossier local - où les fichiers téléchargés doivent aller sur votre Mac.
- Définissez l'intervalle de polling - à quelle fréquence FTPull vérifie le serveur. Toutes les minutes pour une surveillance réactive ; toutes les 5 minutes si vous voulez une utilisation réseau plus légère.
- Activez la connexion. FTPull commence immédiatement à faire du polling.
Voilà pour la configuration. À partir de là, FTPull gère tout automatiquement. Quand un nouveau fichier apparaît sur le serveur, FTPull le détecte au prochain polling, le télécharge, et envoie une notification macOS.
Ce que FTPull surveille
FTPull suit l'état du dossier distant en comparant le listing actuel des fichiers avec celui du polling précédent. Tout ce qui est nouveau est téléchargé. Plus précisément :
- Nouveaux fichiers - fichiers absents du listing précédent
- Fichiers modifiés (optionnel) - fichiers dont la taille ou l'horodatage de modification a changé
- Sous-dossiers - FTPull peut surveiller les sous-dossiers de façon récursive, sans connexion séparée pour chaque sous-dossier
Filtres d'extensions
Si vous n'avez besoin que de certains types de fichiers - des .csv d'un flux de données ou des .pdf d'un système de traitement - définissez un filtre d'extensions. FTPull ignorera silencieusement tout le reste. Utile quand le dossier distant reçoit aussi des types de fichiers que vous n'avez pas besoin de récupérer.
Plusieurs dossiers, plusieurs serveurs
Un des avantages pratiques par rapport aux scripts est la gestion multi-connexions. Besoin de surveiller cinq serveurs FTP différents - un serveur client, un serveur interne, un flux fournisseur et deux variantes régionales ? Ajoutez cinq connexions dans FTPull. Elles s'exécutent toutes indépendamment depuis une seule icône dans la barre de menu, chacune avec son propre intervalle de polling et ses propres paramètres.
Avec cron, chacune serait un script séparé, une entrée cron séparée, et un fichier journal séparé que personne ne lit.
Planification horaire
FTPull inclut une fonctionnalité de planification qui restreint la surveillance à certaines heures et certains jours. Si les fichiers n'arrivent qu'en heures ouvrables - d'un système qui tourne de 9h à 17h - inutile de faire du polling à 3h du matin un samedi. Définissez le planning (ex. 8h–20h, lundi–vendredi), et FTPull se met en pause automatiquement en dehors de ces heures.
Quand quelque chose tourne mal
C'est là que FTPull se distingue le plus clairement de l'approche par script. Quand un téléchargement échoue :
- Le fichier reçoit une étiquette rouge dans le Finder - visible immédiatement dans le dossier de téléchargement sans ouvrir l'app
- Une notification d'erreur est envoyée via le Centre de notifications macOS
- L'erreur est consignée dans la vue journal de FTPull avec la raison précise de l'échec
- Le fichier est réessayé au prochain cycle de polling
Comparez avec un script cron : l'erreur s'ajoute à un fichier journal que vous ne lisez probablement pas, rien d'autre ne se passe, le fichier n'est pas téléchargé jusqu'à ce que quelqu'un remarque son absence.
Les scripts demandent une maintenance constante
Les scripts shell et les cron jobs n'ont pas d'interface, pas de notifications, pas de récupération d'erreurs. Un changement d'identifiants, un déménagement de serveur ou une panne réseau les feront planter silencieusement - et vous ne le saurez que quand quelqu'un demandera pourquoi les fichiers ne sont pas arrivés.
FTPull gère tout ça pour vous. Configurez une fois, et ça tourne discrètement en arrière-plan indéfiniment - avec un feedback complet quand quelque chose nécessite votre attention.