答案:用FTP传档案虽不难,但若老是得要您亲自手动来传,这不仅累人而已也更糟蹋了Linux这多人多工操作系统!
本文便是Auto-ftp和Mirror这二种档案传的输应用,希望藉由cron作业方式让您的传档作业能达到自动化。
各位亲爱的读者在使用Linux时,是否时常必须固定到某些FTP site传回一些档案,或是公司内部分支机构必须定时将某些file传回总公司以便处理,这时如果您还固定用人工手动作ftp档案传输的话,那麽您就落伍了,平平白白浪费了Linux这多人多工的作业系统所赋予您的PC强大的功能了。本文要介绍的是除了mail-ftp之外的两个应用:Auto-ftp和Mirror这二种档案传输应用,并利用cron将之自动化的作业方式。希望经由本文的介绍,能够让您的作业尽量自动化,减少人工的介入并尽量发挥Linux或unix的多工特性。
版本说明
1.本文使用Slackware Linux 2.1.0作范例,若您使用的是SunOS,IBM AIX等vendors Unix 的话,Auto-ftp部份应可正常工作(或只需作少许修改),Mirror部份则须先安装Perl-4.036。
2.Perl最新版本为Perl-5.00 Beta,Mirror使用时会有错误讯息,笔者认为应该是前後版本相容性的问题。笔者强烈建议您使用Perl-4.036以维持正常。Perl-5.00和Perl-4.036均可自NCTUCCCA.NCTU.edu.tw FTP server下/UNIX/gnu目录取得。Auto-ftp传输档案
ftp是TCP/IP协定的叁大主要应用—telnet、ftp、email之一,平时在unix和unix系统之间主要的档案传输,就以ftp使用得最普遍与频繁,譬如说,我要将Linux1.1.6x的patch file,自NCTUCCCA.NCTU.edu.tw传回我的Linux主机的话,那麽我就可以用Anonymous ftp经由下列作法来达成这个目的。(编按:请参考本刊光碟片AUTHORFTPFTP1.txt)
基本的Anonymous ftp操作大抵不脱此操作过程。但若您是某大企业分支机构的人员,每天得把日结资料传回总公司去、或是您在Internet网路上,每周日凌晨3:00在Internet线路较空闲时去国外某大ftp site传回一些定期更新的档案的话,您该不会凌晨3:00爬起来传档案吧?
这时用Auto-ftp加上cron的定时功能,必定能够对您的工作有相当的帮助。ftp有个参数-n是可以作ftp auto-login的功能,可是我们一般在用ftp时却甚少使用到,下例的shell script即以ftp auto-login来作说明。
这时执行getpatch:
getpatch即会将linux-1.1.59.tar.gz与patch6*自NCTUCCCA.NCTU.edu.tw这个ftp server的/Operating-Systems/Linux/kernel/v1.1目录传回您所在的Site Home directory下的patch目录中。
相同的,您若要将档案送出,只要将source和target,me,mypass等变数作些符合您所在环境条件的修改,并将mget改成mput,即可将档案送出。
这时再将Auto-ftp和cron定时功能结合,即可作定时的Auto-ftp档案传输。#----------------------------------------------------------------
% cat ./cron_file
# Minutes Hour Day- Month Day- Command
# of- of-
# Month Week
# 0-59 0-23 1-31 1-12 0-6
#----------------------------------------------------------------
10 2 * * * /user1/roylin/getpatch
# 定义每天凌晨2:10执行getpatch
用crontab指令启动cron_file将cron启动:
% crontab cron_file
再使用crontab -l指令来看crontab动作的内容:
% crontab -l <-- list crontab的内容
这时您的Linux将会在您指定的时刻为您自动执行您想作的Auto-ftp功能了。
经由上例的介绍,笔者希望能够让诸位读者了解到:利用Auto-ftp和cron定时器的应用来作自动化的档案传输功能;同时也希望经由此例浅显介绍,让读者们能够修改此一shell script和crontab以将您的应用需求带入自动化的境界。
看完上面的Auto-ftp功能的介绍後,虽然利用Auto-ftp和cron能够带给我们自动传输的好处,但经验丰富的读者可能看到了有些问题存在:
1.必须先知道档案存在的详细目录和名称。
2.重覆传输、占用网路频宽、浪费资源。尤其是对国外传输时。
3.若要传输含有很多层次目录的档案时,该怎麽办?是否必须每一次目录都知道,将之先在local site建好次目录架构,再一层层去传每一目录中的档案?
4.被ftp传回的档案是Local所建档的时间,无法忠实反应ftp site的档案更新时间。
5.当有更新档案被传回时,你必须亲自去查阅,无法由Auto-ftp自动告知。(除非您再写个script来作)
亲爱的读者您若不幸刚好碰到这些问题的话,那麽下面所介绍的Mirror正是为您解决这些问题的拿手工具了。什麽是Mirror
Mirror是个由Perl(Practical Extraction and Report Language)所写的一个Package,它是利用ftp将不同主机间的档案及阶层目录作复制的功能。 它在ftp传档之前会比较档案名称的日期和size大小,以避免不必要的档案传输所造成网路不必要的traffic。同时亦可设定在传输时作压缩(compress or gzip)或切割(split)的动作。
它最主要是作为ftp Archive维护传输使用,但任何人都可用它来使ftp传输大量的档案。
Mirror程式可在NCTUCCCA.NCTU.edu.tw的/packages/tools/mirror取得。Mirror是由英国Lee McLoughlin(lmjm@doc.ic.ac.uk)先生所写,在此感谢他提供我们这一好用的程式。我们就先到NCTUCCCA.NCTU.edu.tw抓取mirror.tar.gz。(编按:请见光碟片AUTHORFTPFTP2.txt)Mirror是一系列ftp相关程式的一部份,另二支分别是ftpmail和ftpcat,有机会的话,笔者将在以後的篇幅作介绍。以下则为Mirror的安装注意事项:
1.如果安装Mirror是作Archive ftp维护使用,通常须先建一Mirror要执行的目录,再修改mirror.defaults以符合你所在主机的设定,通常不开放给一般使用者使用。
2.如果要安装Mirror作为一般使用命令:安装Mirror到一般使用者能够存取的lib目录(通常是/usr/local/lib/mirror),并将mirror.pl作symbolic link到bin目录,这通常是/usr/local/bin)。
3.修改mirror.pl档案中的$extra_path和$big_tmp这二个环境变数,并且将mirror.pl作symbolic link到bin目录(通常是/usr/local/bin)。
4.修改mirror.pl档案中的$extra_path和$big_tmp二个环境变数$extra_path - mirror使用PATH和$extra_path作为相关程式的搜寻路径。$big_tmp则设定压缩档案时的暂存目录Mirror的安装步骤与执行
Mirror内定会使用/usr/local/lib/mirror/mirror.default这一设定档。这一设定档主要设定远端主机(remote site)名称或IP Address、资料存放目录路径、登录名称、登录密码,本地(local)主机名称或IP Address、资料存放目录路径、资料的拥有者权限设定、是否将资料压缩、使用何种压缩程式、以及作完Mirror後将mail通知谁等等设定。
以下的范例我将mirror.default修改,到NCTUCCCA.NCTU.edu.tw去抓取所有的Slackware Linux的程式和资料,远端目录在/Operating-Systems/Linux/Slackware,并取名为slackware.def。(编按见光碟片AUTHOR FTPFTP3.txt)
Mirror执行时内定会去使用/usr/local/lib/mirror/mirror.default这设定档。我以mirror执行刚刚定义的slackware.def抓取Slackware Linux来作范例。
# mirror./slackware.def &
执行完mirror之後,NCTUCCCA.NCTU.edu.tw 的Slackware Linux已经被mirror完完整整的依照我在slackware.def的设定「照」回我所在的主机上了。并会发出e-mail通知有那些档案被mirror回来。详细的mirror使用和说明,请参阅man mirror或groff-man mirror.man的说明。
Mirror的定时执行
将mirror和cron定时功能结合,即可作定时的mirror档案传输。
% cat ./mirror_cron
# Minutes Hour Day- Month Day- Command
# of- of-
# Month Week
# 0-59 0-23 1-31 1-12 0-6
#------------------------------------------------------------
10 2 * * 0 /usr/local/mirror/user1/roylin/slackware.def
# 定义每周日凌晨 2:10 执行 mirror"照回 "slackware
使用crontab指令启动mirror_cron将cron启动:
% crontab mirror_cron
这时再使用crontab -l指令来看crontab动作的内容:
% crontab -l <-- list crontab的内容
这时您的Linux将会在您指定的时刻为您自动执行mirror将Slackware Linux每周定时自动更新的功能了。同时能将所有档案的日期真实呈现,更可在档案传回时压缩,节省资料的储存空间,最重要的是:mirror不会浪费网路频宽去传输相同的档案,这对於和国外传输档案尤甚。
经由以上的介绍,笔者希望能够让诸位读者了解到:利用Auto-ftp、mirror和cron定时器的应用来作自动化的档案传输功能,同时也希望经由此例浅显的介绍,读者们能够修改此一shell script、slackware.def和
crontab,以将您的应用需求带入自动化的境界。
希望读者们能由此文章获得受益和收获,也期盼诸位先进不吝来函指正。笔者十分乐於与各位读者作双向的沟通。小弟的E-Mail Address是:roylin@stratus.atm.ncu.edu.tw。我们下回再见。