Как смонтировать ресурсы FTP с помощью fstab, когда соединение доступно?

Я хотел бы автоматически смонтировать папку FTP, используя curlftpfs, добавив в fstab строку вроде:

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

Обычно это не будет работать, как во время загрузки сети (обычно Wi-Fi) ) недоступно для моего ноутбука. Я прочитал, что опция _netdev в fstab должна обеспечивать монтирование только тогда, когда сеть доступна, но я получаю сообщение:

Error connecting to ftp: Couldn't resolve host myhost

В качестве альтернативы, я могу смонтировать ресурс с помощью скрипта автозапуска после того, как вход в систему был сделано, но я бы хотел гораздо больше решения fstab.

Конечная цель - синхронизировать локальную папку с папкой ftp с помощью crontab rsync, поэтому, если у вас есть другие предложения, я буду благодарен!

7
задан 16 July 2013 в 21:46

3 ответа

Так как ваша цель - «синхронизировать локальную папку с папкой ftp с помощью crontab rsync», я предлагаю вам написать небольшой скрипт, который монтирует FTP, rsync, размонтирует FTP. Затем запустите этот скрипт из crontab.

Это должно выглядеть примерно так:

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

Убедитесь, что вы используете chmod + x в сценарии.

crontab -e

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

Кроме того, если вы действительно хотите, чтобы папка FTP постоянно монтировалась, вы можете создать скрипт, который монтирует / отключает ваш диск. Если вы также добавите его в fstab, вы можете вручную смонтировать диск.

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

Добавьте это в crontab (crontab -e):

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

Также смотрите для вашего rsync не завершается до следующего запуска. Это может быть сделано автоматически (проверьте, работает ли rsync) или на основе количества данных, которые должны быть синхронизированы (количество времени, необходимое rsync, в худшем случае).

Предполагая, что вы не запускаете rsync для чего-либо еще, проверка его запуска может быть выполнена следующим образом:

pgrep rsync
if [ $? == 0 ]; then
  # rsync running
  exit
else
  # rsync not running
  #do stuff
fi
0
ответ дан 16 July 2013 в 21:46

Я использую SFTP / sshfs для этой цели.

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

Не уверен, что существует способ fstab. Если вы выполняете задачу cron, делая это каждые x минут, все будет в порядке. Если папка уже смонтирована, вы просто получите сообщение «уже подключено». Если вы отключены, вы получите еще одну ошибку, и соединение не будет установлено. Но когда вы подключитесь снова, вы подключитесь через минуту ... В случае задания cron вы можете удалить -o reconnect часть.

Сделайте файл сценария безопасным, так как он содержит пароль.

0
ответ дан 16 July 2013 в 21:46

Вы можете попробовать параметр curlftpfs

connect_timeout = N (секунд).

В вашем примере (допустим, 30 секунд достаточно),

curlftpfs # user: pwd @ myhost: порт / папка / / mnt / mymountfolder, uid = 1000, gid = 1000, umask = 0022, connect_timeout = 30 0 0 fuse -o allow_other

Либо вы можете удалить из fstab и подключиться в Nautilus, а затем сохранить его как закладку и подключаться при каждом запуске .

0
ответ дан 16 July 2013 в 21:46

Другие вопросы по тегам:

Похожие вопросы: