2014-03-31 69 views
0

我们必须每5分钟运行一次脚本以从FTP服务器下载数据。我们已经安排了FTP脚本,但现在我们要每5分钟自动下载一次数据。Debian:Cron bash脚本,每5分钟一次lftp

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

问题是,数据文件在FTP服务器上每5分钟可用。有时候这将是一分钟的抵消。在FTP服务器上可以使用几秒钟的时间下载文件将会很好。也许是一个功能,扫描FTP文件文件夹,如果文件已经可用,然后下载该文件,如果不是的话......该脚本将在约10秒内再次重试。

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

Lot os问题,我希望有人能帮助我这个!

谢谢 凯文Broeren

我们的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 {} \; 

回答

0

也许你会想给一个尝试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:[email protected] /home/kbroeren/datafiles -o allow_other,disable_eprt 

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

如果这个工程福尔你,你可能想将此信息写入到/ etc/fstab文件,以确保该目录安装有mashine每次启动:

curlftpfs#USER:[email protected] /home/kbroeren/datafiles fuse auto,user,uid=USERID,allow_other,_netdev 0 0 

请务必更改USERID到匹配需要访问这些文件的用户的UID。