Como montar recursos FTP com fstab quando a conexão está disponível?

6

Gostaria de montar automaticamente uma pasta de FTP usando curlftpfs colocando fstab uma linha como:

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

Normalmente não funcionaria, pois durante a inicialização a rede (wifi normalmente) não está disponível para o meu laptop. Eu li que _netdev opção no fstab deve garantir a montagem somente quando a rede está disponível, mas recebo a mensagem:

Error connecting to ftp: Couldn't resolve host myhost

Alternativamente, eu poderia montar o recurso com um script autorun após o login ser feito, mas gostaria muito mais da solução fstab.

O objetivo final é sincronizar uma pasta local com a pasta ftp com um rsync crontab, então se você tiver outras sugestões, eu serei grato!

    
por jasmines 16.07.2013 / 19:46

3 respostas

8

Como seu objetivo é "sincronizar uma pasta local com a pasta ftp com um rsync crontab", sugiro que você escreva um pequeno script que monte o FTP, rsync, desmonte o FTP. Em seguida, execute este script no crontab.

Deve ser algo assim:

#!/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

Verifique se você chmod + x no script.

crontab -e

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

Além disso, se você realmente quiser a pasta FTP montada o tempo todo, você pode criar um script que monte / desmonte sua unidade. Se você também adicioná-lo ao fstab, poderá montar manualmente a unidade.

fstab:

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

network-mount.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

Adicione isto ao crontab (crontab -e):

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

Tenha cuidado também para que o seu rsync não seja concluído antes da próxima execução. Isso pode ser feito automaticamente (verifique se o rsync está sendo executado) ou com base na quantidade de dados que precisam estar em sincronia (quantidade de tempo que o rsync demora, no pior cenário).

Supondo que você não execute o rsync para mais nada, verificar se ele está sendo executado pode ser feito assim:

pgrep rsync
if [ $? == 0 ]; then
  # rsync running
  exit
else
  # rsync not running
  #do stuff
fi
    
por arve0 23.07.2013 / 02:51
0

Estou usando o SFTP / sshfs para esse propósito

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

Não tenho certeza se existe uma maneira fstab. Se você executar um cron job fazendo isso a cada x minutos, tudo bem. Se a pasta já estiver montada, você receberá apenas o erro "já conectado". Se você estiver desconectado, receberá outro erro e nenhuma conexão será feita. Mas quando você estiver conectado novamente, você irá se conectar em um minuto ... No caso do cron job, você pode remover -o reconnect part.

Torne o arquivo de script seguro, pois ele contém a senha.

    
por Dee 20.07.2013 / 12:06
0

Você pode tentar a opção curlftpfs

  

connect_timeout = N (segundos).

No seu exemplo (digamos que 30 segundos são suficientes),

  

curlftpfs # usuário: pwd @ myhost: porta / pasta / / mnt / mymountfolder, uid = 1000, gid = 1000, umask = 0022, tempo_de_conexão = 30 0 0 fuse -o allow_other

Como alternativa, você pode remover do fstab e conectar-se ao Nautilus, salvá-lo como bookmark e conectar-se a cada inicialização.

    
por bob 21.07.2013 / 16:20