web-dev-qa-db-fra.com

Comment monter des ressources FTP avec fstab lorsque la connexion est disponible?

J'aimerais monter automatiquement un dossier FTP en utilisant curlftpfs en mettant dans fstab une ligne comme celle-ci:

curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder Fuse allow_other,uid=1000,gid=1000,umask=0022,_netdev 0 0

Normalement, cela ne fonctionnerait pas, car pendant le démarrage, le réseau (généralement le wifi) n'est pas disponible pour mon ordinateur portable. J'ai lu que l'option _netdev dans fstab ne devrait assurer le montage que lorsque le réseau est disponible, mais je reçois le message suivant:

Error connecting to ftp: Couldn't resolve Host myhost

Sinon, je pourrais monter la ressource avec un script autorun après la connexion, mais j'aimerais beaucoup plus la solution fstab.

L’objectif final est de synchroniser un dossier local avec le dossier ftp avec une crontab rsync, donc si vous avez d’autres suggestions, je vous en serai reconnaissant!

6
jasmines

Comme votre objectif est "de synchroniser un dossier local avec le dossier ftp avec une crontab rsync", je vous suggère d'écrire un petit script qui monte le FTP, le rsync, le démontage du FTP. Puis lancez ce script depuis crontab.

Cela devrait ressembler à ceci:

#!/bin/bash
curlftpfs user:pwd@myhost:port/folder/ /mnt/mymountfolder
#might need sleep 1 here
rsync -a /mnt/mymountfolder /local/folder
fusermount -uz /mnt/mymountfolder

Assurez-vous de chmod + x sur le script.

crontab -e

#m h d M wd
0 * * * * /usr/local/bin/backup-script

De plus, si vous voulez vraiment que le dossier FTP soit monté tout le temps, vous pouvez créer un script qui monte/démonte votre lecteur. Si vous l'ajoutez également à fstab, vous pouvez monter le lecteur manuellement.

fstab:

curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder Fuse noauto,user,uid=1000,gid=1000,umask=0022 0 0

monte-réseau.sh:

#!/bin/bash
folder=/media/ftp
# check if Host is alive
ping=`/usr/bin/fping -q Host.dyn.org`
if [ $? == 0 ]; then
  # check if folder is mounted
  mountpoint $folder > /dev/null
  if [ $? != 0 ]
    # mount, timeout in case something goes wrong
    then timeout 10s mount $folder
  fi
  else
  mountpoint $folder > /dev/null
  if [ $? = 0 ]
    #unmount lazy (network down)
    then umount -l $folder
  fi
fi

Ajoutez ceci à crontab (crontab -e):

* * * * * /usr/local/bin/network-mount.sh

Veillez également à ce que votre rsync ne se termine pas avant la prochaine exécution. Cela peut être fait automatiquement (vérifiez si rsync est en cours d'exécution) ou en fonction du nombre de données devant être synchronisées (temps nécessaire à rsync, dans le pire des cas).

En supposant que vous n’exécutiez pas rsync pour quoi que ce soit d’autre, vérifiez s’il fonctionne:

pgrep rsync
if [ $? == 0 ]; then
  # rsync running
  exit
else
  # rsync not running
  #do stuff
fi
9
arve0

Vous pouvez essayer l'option curlftpfs

connect_timeout = N (secondes).

Dans votre exemple (disons que 30 secondes suffisent),

curlftpfs # user: pwd @ myhost: port/folder// mnt/mymountfolder, uid = 1000, gid = 1000, umask = 0022, connect_timeout = 30 0 0 Fuse -o allow_other

Vous pouvez également supprimer de fstab et vous connecter à Nautilus, puis l’enregistrer en tant que favori et vous connecter à chaque démarrage.

0
bob

J'utilise SFTP/sshfs à cette fin

echo password | sshfs username@serverIP:/ /mnt/mountpointfolder -p portnumber -o reconnect -o password_stdin

Je ne sais pas s'il y a un moyen de fstab. Si vous exécutez un travail cron en le faisant toutes les x minutes, tout ira bien. Si le dossier est déjà monté, vous obtiendrez simplement l'erreur "déjà connecté". Si vous êtes déconnecté, vous obtiendrez une autre erreur et aucune connexion ne sera établie. Mais lorsque vous serez à nouveau connecté, vous vous connecterez dans une minute ... En cas de tâche cron, vous pouvez supprimer la partie -o reconnect.

Protégez le fichier de script car il contient le mot de passe.

0
Dee