ftp搭建以及增量同步实现

  最近在接触系统运维,搭建好lnmp之后,老大布置的第一件任务就是ftp的搭建和实现两台主机之间的定时增量同步。自己研究了一周,略有心得,这里简单总结一下,希望于正在看这篇文章的你有所帮助。

老规矩,先说一下本文的结构,理顺思路。本文分两部分:
    ftp的相关知识和环境搭建
    定时增量同步实现(这里主要介绍通过crontab)
好了,正式开始。
一、ftp的相关知识和环境搭建
  1、ftp相关知识
  FTP(File Transfer Protocol, FTP)是 TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于 网络协议组的 应用层。FTP客户机可以给 服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。
  限于篇幅,关于ftp的基础知识,这里就略过,读者如果有兴趣,可以点击一下链接 http://www.360doc.com/content/09/0410/15/126429_3084317.shtml查看,相当详细。
  2、服务器搭建
Ubuntu下Ftp的软件有好多种:比如wu-Ftp、proFtpd、vsFtpd,相比之下,vsftp功能强大同时配置也简单,并且大多是linux系统下自带的Ftp软件,而且像FREEBSD等网站都是采用,所以在这里选择了vsftpd。
安装(如果出现意外就先用sudo apt-get update更新一下再安装):
  sudo apt-get install vsFtpd
修改配置:
修改之前,先备份一下总是好的,省得万一出现意外再手忙脚乱的:sudo cp /etc/vsFtpd.conf /etc/vsFtpd.conf.old。现在可以放心编辑了:sudo gedit /etc/vsFtpd.conf。下面我们一起来看看它的配置文件吧:

#anonymous_enable 是否允许匿名ftp,如否则选择NO,默认允许匿名访问,注意当允许是所有用户均视为匿名登录。

#local_enable 是否允许本地用户访问,是指VSFTP所在机器上的注册用户。

#local_umask=022 默认的umask码

#write_enable 是否允许本地用户修改和删除

#local_umask=022 FTP上传文件权限 ,默认是077

#anon_upload_enable=YES 是否允许匿名用户上传

#anon_mkdir_write_enable=YES 是否允许匿名用户的写和创建目录的权限

#dirmessage_enable=YES 当切换目录时,是否显示该目录下message隐藏文件的内容

#xferlog_enable=YES 是否激活上传和下载的日志

#connect_from_port_20=YES 是否启动FTP数据端口20的连接请求

#chown_uploads=YES 是否改变上传文件的所有者

#chown_username=whoever 改变上传文件的所有着为whoever

#xferlog_file=/var/log/vsftpd.log 上传/下载日志文件所默认的路径

#xferlog_std_format=YES 是否使用标准的ftpd xferlog日志格式

#idle_session_timeout=600 是否将在用户会话空闲10分钟后被中断

#data_connection_timeout=120 是否将在数据连接空闲2分钟后被中断

#nopriv_user=ftpsecure 是否运行vsftpd需要的非特殊系统用户默认nobody

#async_abor_enable=YES 是否是否允许运行特殊的FTP命令async

#ascii_upload_enable=YES 是否启用上传的ascii传输方式

#ascii_download_enable=YES 是否启用下载的ascii传输方式

#ftpd_banner=Welcome to blah FTP service. 用户连接服务器后显示信息

#deny_email_enable=YES 是否允许某些匿名用户使用邮件地址(默认的)

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list #指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。

注意:当chroot_local_user=NO、chroot_list_enable=YES时,vsftpd.chroot_list中用户为锁定用户,即他们除了自己的目录,不可以访问其他目录。

当chroot_local_user=YES、chroot_list_enable=YES时,vsftpd.chroot_list中用户为非锁定用户,他们可以访问任何其他目录。

local_root=/var/www/web (路径自定义)#定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。(注释则访问该用户自己目录)

write_enable=YES

max_clients=100 #FTP服务器最大承载用户

max_per_ip=5 #限制每个IP的进程

local_max_rate=256000 #最大传输速率(b/s)

hide_ids=YES #是否隐藏文件的所有者和组信息

idle_session_timeout= 3000  #空闲(发呆)用户会话的超时时间,若是超出这时间没有数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。

  配置vsftpd.chroot_list

增加需要锁定/非锁定目录的用户(根据自己情况添加)

  删除vsftp默认访问路径

$ sudo rmdir /home/ftp 根据local_root定义的目录,新建一个,以控制登陆用户进入此目录

  重启vsftp服务

$ /etc/init.d/vsftpd restart

ok,关于服务器搭建先就这么多吧,可能有些细节没注意到,等以后再完善把。

二、定时增量同步带实现

 1、 首先说增量同步的实现:

先来熟悉下 了lftp 的基本用法,如果 ftp 服务器是匿名,只要:

  lftp ftpsite

就可以登录进服务器,如果需要用户名和密码,就要像下面的样子:

   lftp -u username,password ftpsite

然后通过mirror,实现同步

mirror 需要备份的目录 保存备份计算机的本地目录

例如 mirror /work save/backup,这样 lftp 就会帮你自动同步目录下的所有文件。

这里,读者了解一下mirror的相关参数,是很有必要的:

--delete: 如果远程目录下已经没有某个文件,而本地有,则删除这个文件。

--only-newer: 只下载新的文件。

--exculde: 不包含某个目录。

--verbose: 详细输出。

比如:mirror --delete --only-newer --verbose /work backup/,表示自动备份远处电脑的 work文件夹,到本地当前目录的 backup文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。

你也可以用 lftp 的 -e 选项,把命令直接接在 lftp 之后:

lftp -u username,password -e"mirror --delete --only-newer --verbose /work backup/" ftpsite

也可以用 at 选项指定备份的时间:

lftp at 00:00 -u username,password -e"mirror --delete --only-newer --verbose /work backup/" ftpsite

这样每天夜里 12 点就会执行备份任务。通过这个选项,我们可以实现简单的定时。

那么,如何恢复备份呢,很简单,只需要在 mirror 命令中加入 --reverse 选项:

mirror --reverse --delete --only-newer --verbose /work backup/

这样 lftp 就会将备份上传到 ftp 服务器上了。

  2、这里要重点讲的是通过crontab实现更加灵活的定时控制。说句题外话,做这个任务最大的收获并不是这项任务本身,而是了解到了linux的自动执行crontab以及以及windows下的任务计划schtasks机制,关于它们潜在的巨大的作用,我相信不用我多说。

  先了解下crontab。在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。linux缺省会启动crond进程,crond进程不需要用户启动、关闭。crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。

cron的调度文件有以下几个:
  • crontab
  • cron.d
  • cron.daily
  • cron.hourly
  • cron.monthly
  • cron.weekly
    如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。定时增量同步实现思路有两种:一种是直接修改crontab,达到相应目的,但是一般不推荐直接修改配置文件;另一种我们可以在配置目录下新建脚本,然后通过执行该脚本,定时去调用我们制定的脚本命令。
    比如: 
    每隔一分钟执行一次脚本 /opt/bin/test-cron.sh ( 注意:要使脚本可执行,必须编译 chmod +x filename 这样才能用./filename 来运行)
    可以在cron.d新建脚本 echo-date.sh 
    内容为
    */1 * * * * root  /opt/bin/test-cron.sh
    关于crond脚本的实现,这里推荐一个不错的网址 http://liguxk.blog.51cto.com/129038/123555,写的真心不错。还有一个不错的网址是关于crontab命令的使用的 http://www.lc365.net/html/tech/26053.htm,也不错。
     

 

 
 

转载于:https://www.cnblogs.com/visionfang/archive/2012/09/27/2706309.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值