jas*_*nes 7 ftp fstab automount rsync curlftpfs
我想挂载的FTP文件夹使用curlftpfs将在fstab一排这样的:
curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder fuse allow_other,uid=1000,gid=1000,umask=0022,_netdev 0 0
Run Code Online (Sandbox Code Playgroud)
通常它不会工作,因为在启动期间,我的笔记本电脑无法使用网络(通常是 wifi)。我_netdev在 fstab 中读到该选项应确保仅在网络可用时安装,但我收到消息:
Error connecting to ftp: Couldn't resolve host myhost
Run Code Online (Sandbox Code Playgroud)
或者,我可以在登录后使用自动运行脚本挂载资源,但我想要更多 fstab 解决方案。
最终目标是用crontab rsync同步一个本地文件夹和ftp文件夹,所以如果你有其他建议,我将不胜感激!
小智 10
由于您的目标是“使用 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
Run Code Online (Sandbox Code Playgroud)
确保在脚本上 chmod +x 。
crontab -e
#m h d M wd
0 * * * * /usr/local/bin/backup-script
Run Code Online (Sandbox Code Playgroud)
此外,如果您真的希望一直安装 FTP 文件夹,您可以制作一个安装/卸载驱动器的脚本。如果您还将它添加到 fstab,您可以手动挂载驱动器。
表:
curlftpfs#user:pwd@myhost:port/folder/ /mnt/mymountfolder fuse noauto,user,uid=1000,gid=1000,umask=0022 0 0
Run Code Online (Sandbox Code Playgroud)
网络挂载.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
Run Code Online (Sandbox Code Playgroud)
将此添加到 crontab (crontab -e):
* * * * * /usr/local/bin/network-mount.sh
Run Code Online (Sandbox Code Playgroud)
还要注意您的 rsync 在下一次运行之前没有完成。这可以自动完成(检查 rsync 是否正在运行),或者基于需要同步的数据量(rsync 花费的时间量,最坏的情况)。
假设你没有为其他任何东西运行 rsync,检查它是否正在运行可以这样完成:
pgrep rsync
if [ $? == 0 ]; then
# rsync running
exit
else
# rsync not running
#do stuff
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28846 次 |
| 最近记录: |