#1 Le 04/03/2021, à 12:31
- kedjo
Problème d'échange ftp avec curlftpfs
Bonjour,
J'ai automatisé l'échange entre deux serveurs, l'un en ligne fournissant un service ftp, et l'autre local qui se charge de monter localement le ftp. Au démarrage de la machine locale tout marche bien et les échanges se font sans problème.
Le problème est qu'après à un temps rien ne se passe, pas d'échange alors que le répertoire distant est monté mais difficilement accessible. Dans les même conditions les échanges avec un client ftp graphique(FileZilla) se passe sans problème.
L'ordinateur local
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
Le script de montage et échange
#!/bin/sh
#/srv/myscript/copy_srv_ech.sh
if mount | grep /mnt/from_srv > /dev/null; then
mv /mnt/from_srv/CCC_ERR/*.* /opt/datas/from_ggg/CCC_ERR/
mv /mnt/from_srv/AAA/*.* /opt/datas/from_ggg/AAA/
else
curlftpfs -o user=ftpuser:ftpuser@2021 54.x.x.x /mnt/from_srv/
if mount | grep /mnt/from_srv > /dev/null; then
mv /mnt/from_srv/CCC_ERR/*.* /opt/datas/from_ggg/CCC_ERR/
mv /mnt/from_srv/AAA/*.* /opt/datas/from_ggg/AAA/
else
curlftpfs -o user=ftpuser:ftpuser@2021 54.x.x.x /mnt/from_srv/
fi
fi
Le cron
#Flux venant du serveur en ligne
* * * * * bash /srv/myscript/copy_srv_ech.sh
Merci pour l'assistance
Hors ligne
#2 Le 04/03/2021, à 13:21
- bruno
Re : Problème d'échange ftp avec curlftpfs
Ce n'est pas un problème de serveur, mais un problème de script ⇒ déplacement du sujet.
Explique-nous ce qu'est censé faire ton script.
Ce que j'en comprends :
Si le montage est effectué on déplace certaines données du point de monrtage vers /opt
Sinon on effectue le montage. Ok (enfin presque)
À quoi servent les lignes suivantes qui répètent les mêmes instructions ? (répéter les mes instructions dans un script est le signe d'une erreur de conception/compréhension)
Es-tu sûr que ta commande test que le montage est bien effectué ? (tester l'existence du point de montage ne garnti pas cela)
N.B.: si l'objectif est de synchroniser certaines données depuis une machine vers une autre, curlftps n'est clairement pas la bonne solution. Si le serveur est accessible en SSH, il faut utiliser rsync.
#3 Le 04/03/2021, à 13:48
- kedjo
Re : Problème d'échange ftp avec curlftpfs
Bonjour Bruno
Merci d'avoir déplacement dans la bonne section.
En fait, le script doit copier des fichiers depuis deux dossiers distincts. La répétition des lignes qui se suivent c'est vraiment un problème de conception, merci.
Donc après correction j'ai:
#!/bin/sh
#/srv/myscript/copy_srv_ech.sh
if mount | grep /mnt/from_srv > /dev/null; then
mv /mnt/from_srv/CCC_ERR/*.* /opt/datas/from_ggg/CCC_ERR/
mv /mnt/from_srv/AAA/*.* /opt/datas/from_ggg/AAA/
else
curlftpfs -o user=ftpuser:ftpuser@2021 54.x.x.x /mnt/from_srv/
fi
Es-tu sûr que ta commande test que le montage est bien effectué ?
Bon, avant d'automatiser j'avais testé.
tester l'existence du point de montage ne garnti pas cela
Ah? Quel serait la solution?
Le serveur n'est fourni que le ftp
Merci
Hors ligne
#4 Le 04/03/2021, à 14:12
- bruno
Re : Problème d'échange ftp avec curlftpfs
Teste simplement l'existence d'un dossier sous le point de montage, exemple :
if [ ! -d /mnt/from_srv/CCC_ERR ] ; then
on monte avec curlftpfs
si la commande échoue, on envoie un message d'erreur et on quitte le script;
fi
on déplace les fichiers vers /opt
si la commande échoue, on envoie un message d'erreur et on quitte le script;
Au sujet du déplacement des fichiers, pourquoi *.* ? Es-tu sûr que tous les fichiers contiennet un point dans leur nom ?
Pour le reste je ne connais pas curlftpfs mais je ne suis pas sûr qu'une fois le dossier monté les changements qui peuvent avoir lieu sur le serveur y soit répercutés. Je pense même que ce n'est pas le cas. Ce serait donc normal qu'après un premier déplacement de fichiers il ne se passe plus rien même si le script est exécuté toute les minutes. Ou alors il faut démonter/remonter a chaque lancement du script ?
Si les données sur le serveur ne sont accessibles qu'en FTP il vaudrait mieux faire un script qui se connecte en FTP et lance les commandes FTP pour récupérer les fichiers voulus (il y a plein d'exemples sur le web pour faire cela). Et appeler ce script à intervalle régulier (5 minutes ?) via une tâche cron.
Dernière modification par bruno (Le 04/03/2021, à 14:52)
#5 Le 04/03/2021, à 14:43
- kedjo
Re : Problème d'échange ftp avec curlftpfs
Au sujet du déplacement des fichiers, pourquoi *.*
Tous les fichiers contiient de point.
Pour le reste je ne connais pas curlftpfs mais je ne suis pas sûr qu'une fois le dossier monté les changements qui peuvent avoir lieu sur le serveur y soit répercutés...
Oui les changement sont répercutés automatiquement.
Si les données sur le serveur ne sont accessibles qu'en FTP il vaudrait mieux faire un script qui se connecte en FTP et lance les commandes FTP pour récupérer les fichiers voulus...
J'ai vu un exemple associant wget et ftp mais supprimant pas les éléments copiés, alors que je doit supprimer après chaque copie.
Hors ligne
#6 Le 04/03/2021, à 14:50
- bruno
Re : Problème d'échange ftp avec curlftpfs
Oui les changement sont répercutés automatiquement.
Dans ce cas cela devrait fonctionner avec le script que j'ai donné en #4 (à améliorer évidemment)
#7 Le 04/03/2021, à 15:00
- kedjo
Re : Problème d'échange ftp avec curlftpfs
Ok, je vais retoucher le script et observer.
Pourquoi la ligne suivante n'est pas rassurante?
if mount | grep /mnt/from_srv > /dev/null; then
Hors ligne
#8 Le 04/03/2021, à 15:24
- bruno
Re : Problème d'échange ftp avec curlftpfs
Tester la présence d'un point de montage dans la sortie de la commande mount ne permet pas d'être sûr que la partition voulue est monté sur ce point de montage et dans l'absolu la sortie de mount n'est pas fiable à 100%). Tester la présence d'un dossier censé être sur cette partition, oui.
#9 Le 23/05/2021, à 17:15
- kedjo
Re : Problème d'échange ftp avec curlftpfs
Bonjour Bruno,
Excusez pour ce long temps de silence.
La condition suivante comme tu l'avait dit n'assure pas qu'un dossier distant est réellement monté, mais je l'ai gardé parce qu'il assure que le montage était déjà effectué avec succès et curlftpfs se charge de reconnexion automatique en cas de timeout de connexion. Mais si cette condition n'est pas vérifiée, alors on tente un nouveau montage avec curlftpfs.
if mount | grep /mnt/from_srv > /dev/null; then
#Opération de montage effectuée avec succès
# Opération d'échange
else
#Tentative de connexion
curlftpfs -o user=ftpuser:ftpuser@2021 54.x.x.x /mnt/from_srv/
fi
Bon, effectuer des échanges sans tester que le répertoire existait était une grave erreur. D'où j'ai obtenu ceci qui prétend mon problème:
#!/bin/sh
#/srv/myscript/copy_srv_ech.sh
if mount | grep /mnt/from_srv > /dev/null; then
if [ -d /mnt/from_srv/CCC_ERR ]
then
#on déplace les fichiers vers /opt
#si la commande échoue, on envoie un message d'erreur et on quitte le script;
fi
else
curlftpfs -o user=ftpuser:ftpuser@2021 54.x.x.x /mnt/from_srv/
#si la commande échoue, on envoie un message d'erreur et on quitte le script;
fi
J'ai évité d'utiliser seulement la structure ci-desous, parce qu'il tente de lancer curlftpfs à chaque que le /mnt/from_srv/CCC_ERR ne sera pas visible.
if [ ! -d /mnt/from_srv/CCC_ERR ] ; then
on monte avec curlftpfs
si la commande échoue, on envoie un message d'erreur et on quitte le script;
fi
on déplace les fichiers vers /opt
si la commande échoue, on envoie un message d'erreur et on quitte le script;
Merci. Il y a encore d'autre suggestion je suis preneur, sinon je marque comme résolu le sujet
Hors ligne