Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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
Bruno a écrit :

Es-tu sûr que ta commande test que le montage est bien effectué ?

Bon, avant d'automatiser j'avais testé.

Bruno a écrit :

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

Bruno a écrit :

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