【问题标题】:Debian: Cron bash script every 5 minutes and lftpDebian:每 5 分钟一次的 Cron bash 脚本和 lftp
【发布时间】:2014-03-31 20:08:58
【问题描述】:

我们必须每 5 分钟运行一次脚本才能从 FTP 服务器下载数据。我们已经安排好了 FTP 脚本,但是现在我们想每 5 分钟自动下载一次数据。

我们可以使用:“0 * * * * /home/kbroeren/import.ch” 其中 import ftp 脚本用于下载数据文件。

关键是,FTP 服务器上的数据文件每 5 分钟可用一次。有时这将是一分钟的偏移量。当文件在 FTP 服务器上可用几秒钟时下载文件会很好。如果文件已经可用,可能会扫描 ftp 文件夹,然后下载文件,如果没有......脚本将在大约 10 秒后重试。

另一个需要解决的问题是 FTP 脚本的时间。地图中有 12k 个文件。每次运行脚本时,我们都应该只更新最新的。现在扫描文件夹需要大约 3 分钟的时间,这太长了。所有数据文件的文件名都包含日期和时间,是否有可能制作一个动态文件名以每5分钟下载一次正确的文件?

很多操作系统问题,我希望有人可以帮助我解决这个问题!

谢谢 凯文·布罗伦

我们的 FTP 脚本:

 #!/bin/bash
 HOST='ftp.mysite.com'
 USER='****'
 PASS='****'
 SOURCEFOLDER='/'
 TARGETFOLDER='/home/kbroeren/datafiles'

 lftp -f "
 open $HOST
 user $USER $PASS
 LCD $SOURCEFOLDER
 mirror --newer-than=now-1day --use-cache $SOURCEFOLDER $TARGETFOLDER
 bye
 "

 find /home/kbroeren/datafiles/* -mtime +7 -exec rm {} \;

【问题讨论】:

    标签: linux bash ftp cron


    【解决方案1】:

    也许您可能想尝试一下curlftpfs。使用这个 FUSE 文件系统,您可以将 FTP 共享挂载到本地文件系统中。如果这样做,您将不必从 FTP 下载文件,并且可以像在本地一样遍历文件。您可以按照以下步骤试一试:

    # Install curlftpfs
    apt-get install curlftpfs
    # Make sure FUSE kernel module is loaded
    modprobe fuse    
    # Mount the FTP Directory to your datafiles directory
    curlftpfs USER:PASS@ftp.mysite.com /home/kbroeren/datafiles -o allow_other,disable_eprt
    

    您现在可以根据需要处理这些文件。您将始终在此目录中拥有最新的文件。但请注意,这不是文件的副本。您直接在 FTP 服务器上工作。例如,从 /home/kbroeren/datafiles 中删除文件会将其从 FTP 服务器中删除。

    如果这对您有用,您可能需要将此信息写入 /etc/fstab,以确保每次启动 mashine 时都会挂载该目录:

    curlftpfs#USER:PASS@ftp.mysite.com /home/kbroeren/datafiles fuse auto,user,uid=USERID,allow_other,_netdev 0 0
    

    确保更改 USERID 以匹配需要访问此文件的用户的 UID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2011-10-24
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多