Linux平台自动下载FTP服务器数据的实现
2017-03-06聂林波
聂林波
摘要:针对Linux环境下自动下载FTP服务器数据文件需要,提出用shell脚本程序实现数据自动下载功能。该方法将Linux系统的crontab命令、date命令、shell脚本和wget软件有机结合实现FTP数据的自动下载。Linux系统能定时自动运行shell脚本调用wget软件自动下载数据文件。在Linux系统下灵活组合各种命令能够低成本实现复杂功能。
关键词:Linux;crontab;shell;wget;定时;下载
中图分类号:TP316 文献标识码:A 文章编号:1009-3044(2016)30-0248-01
The Method to Download Files Automatically Form FTP Website on Linux System
NIE Lin-bo
(The Ocean Meteorological and Hydrological Center of South China Sea Fleet, Zhanjiang 524001, China)
Abstract: to fulfill the need of download data file from FTP server automatically, the method was proposed which can download file at regular time everyday using shell scripts. The method combined crontab, date, shell scripts and wget command to realize the task of downloading file automatically. Linux can run shell scripts to download file on FTP server at regular time. The complicated function can be realized by combining a sort of commands organically.
Key words: Linux; crontab; shell; wget; timing; download
1 需求的提出
在工作中遇到這样的情况,需要从FTP网站自动下载数据文件。这些文件每天会自动产生并保存在按日期建立的文件夹中,文件名包含有日期等信息。每天生成的文件数以百计。如果手工下载,效率很低。考虑到这些特点,必须采用软件自动下载。
2 实现的方法
在Linux下有个软件wget可以实现从网站下载文件。要实现自动下载,最经济的方法是使用crontab命令定时执行wget命令即可无需人工干预自动运行。要使wget能根据日期变化自动改变下载目录和文件名,就需要编写shell脚本来实现。Shell脚本自动根据当前时间产生需要的日期和时间参数,wget利用这些参数下载相应的数据文件。
3 关键技术
3.1 Wget
wget是一个下载文件的软件,它以命令行方式执行下载任务。wget工具体积小但功能完善。wget有以下功能和特点:
1)支持断点下传功能。当网络中断恢复后,wget可以继续之前的下载任务,无需重新下载。
2)支持FTP和HTTP下载方式。
3)支持代理服务器。
4)设置方便,只要指定参数,即完成设置,适合程序化运行。
5)软件免费。
wget基本的语法是:wget [参数列表] URL
使用如下命令行下载FTP服务器数据:
wget -O fileN--ftp-user=USERNAME --ftp-password=PASSWORD url
FTP服务器用户名和密码分别为USERNAME和PASSWORD。数据文件由url指定,参数O指定数据文件以fileN为文件名保存。
3.2 crond
crond是Linux下用来周期性地执行某种任务或等待处理某些事件的一个守护进程, crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。使用 crontab –e命令来定制自己的计划任务,用crontab –l命令显示计划任务列表。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。crontab文件中,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。hour:表示小时,可以是从0到23之间的任何整数。day:表示日期,可以是从1到31之间的任何整数。month:表示月份,可以是从1到12之间的任何整数。week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
3.3 shell
是用户和Linux内核之间的接口程序。shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。Shell也是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。高级语言中常见的判断、选择、循环结构,shell也具备。Shell脚本将一系列的Linux命令组合起来即可实现通常需要用高级语言编程实现的各种复杂任务。
3.4 date命令
Linux下的date命令比windows下的date命令功能更强大。通过下面的shell语句可以对当前时间进行计算,得到指定日期和时间字符串,从而实现数据文件路径和名称的自动生成。
stringyear=`date --date="1 days ago" +%Y`
stringmonth=`date --date="1 days ago" +%m`
stringday=`date --date="1 days ago" +%d`
4 结束语
该方法将Linux系统的crontab命令、date命令、shell脚本和wget软件有机结合实现FTP数据的自动下载。对于大量数据文件下载任务,运用这种方法可以实现数据自动高效下载。在Linux系统下灵活组合各种命令能够低成本实现复杂功能。这种下载技术存在不足,在于wget只能处理利用用户名/密码方式限制访问的网站,对于需要证书做认证的网站,就只能利用其他下载工具。
参考文献:
[1] 门佳. Linux Shell脚本攻略[M]. 2版. 北京: 人民邮电出版社, 2014.
[2] 王军. Linux系统命令及Shell脚本实践指南[M]. 北京: 机械工业出版社, 2013.
[3] 赵哲. 用Shell函数实现定时关机[J]. 科技情报开发与经济, 2008(28).
[4] 韩璐. 在UNIX系统下用shell编程实现对文件的操作[J]. 中国科技信息, 2006(13).