连接可用时如何使用 fstab 挂载 FTP 资源?

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)

  • 好答案。但是考虑将您的密码放在 `/root/.netrc` 文件中。https://linuxconfig.org/mount-remote-ftp-directory-host-locally-into-linux-filesystem (2认同)