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!
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
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.
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.