Я хотел бы автоматически смонтировать папку 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, поэтому, если у вас есть другие предложения, я буду благодарен!
Так как ваша цель - «синхронизировать локальную папку с папкой 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
Я использую SFTP / sshfs для этой цели.
echo password | sshfs username@serverIP:/ /mnt/mountpointfolder -p portnumber -o reconnect -o password_stdin
Не уверен, что существует способ fstab. Если вы выполняете задачу cron, делая это каждые x минут, все будет в порядке. Если папка уже смонтирована, вы просто получите сообщение «уже подключено». Если вы отключены, вы получите еще одну ошибку, и соединение не будет установлено. Но когда вы подключитесь снова, вы подключитесь через минуту ... В случае задания cron вы можете удалить -o reconnect
часть.
Сделайте файл сценария безопасным, так как он содержит пароль.
Вы можете попробовать параметр curlftpfs
connect_timeout = N (секунд).
blockquote>В вашем примере (допустим, 30 секунд достаточно),
curlftpfs # user: pwd @ myhost: порт / папка / / mnt / mymountfolder, uid = 1000, gid = 1000, umask = 0022, connect_timeout = 30 0 0 fuse -o allow_other
blockquote>Либо вы можете удалить из fstab и подключиться в Nautilus, а затем сохранить его как закладку и подключаться при каждом запуске .