我想通过curlftpfs
输入fstab
如下命令来自动挂载 FTP 文件夹:
curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder fuse allow_other,uid=1000,gid=1000,umask=0022,_netdev 0 0
通常它不会起作用,因为在启动期间我的笔记本电脑无法使用网络(通常是 wifi)。我读到_netdev
fstab 中的选项应确保仅在网络可用时才进行安装,但我收到了以下消息:
Error connecting to ftp: Couldn't resolve host myhost
或者,我可以在登录后使用自动运行脚本挂载资源,但我更喜欢 fstab 解决方案。
最终目标是使用 crontab rsync 将本地文件夹与 ftp 文件夹同步,因此如果您有其他建议,我将不胜感激!
答案1
由于您的目标是“使用 crontab rsync 将本地文件夹与 ftp 文件夹同步”,我建议您编写一个小脚本来挂载 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
网络挂载.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
答案2
我使用 SFTP / sshfs 来实现这个目的
echo password | sshfs username@serverIP:/ /mnt/mountpointfolder -p portnumber -o reconnect -o password_stdin
不确定是否有 fstab 方法。如果您每 x 分钟执行一次 cron 作业,那就没问题了。如果文件夹已挂载,您将只会收到“已连接”错误。如果您断开连接,您将收到另一个错误,并且不会建立连接。但是当您再次连接时,您将在一分钟内连接...如果是 cron 作业,您可以删除-o reconnect
部分。
确保脚本文件的安全,因为它包含密码。
答案3
您可以尝试 curlftpfs 选项
connect_timeout=N(秒)。
在您的示例中(假设 30 秒就足够了),
curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder,uid=1000,gid=1000,umask=0022,connect_timeout=30 0 0 fuse -o allow_other
或者,您可以从 fstab 中删除并在 Nautilus 中连接,然后将其保存为书签并在每次启动时连接。