cygwinrsync_使用python脚本配合cygwin自动备份文件搭配文件服务器

1. 要求

企业是做线上教育的,因此 教师的录课视頻是很重要的文件。必须把视頻从录课的PC每日同歩到文件网络服务器,并确保文件文件的一致性。

2. 文件同步软件挑选

最初应用的是allway sync。同歩速率还不错,大约11m上下,可是有是会同歩不成功,应用计划任务并不是每一次都能取得成功。还有一个难题便是用的太经常就提醒受权,沒有寻找哪些好的破译。

第二个手机软件是freefilesync。专业软件,应用sftp协议书,缺陷是速率很慢1m上下,并且由于是win的网络服务器因此 必须安裝ssh软件开启22端口。并且也是有同歩不成功的难题。

在检测freefilesync的情况下发觉了cygwin这一武器,后开果断考虑到是否应用cygwin的rsync相互配合计划任务同歩视頻文件。检测結果很令人满意速率16m上下,相互配合计划任务应用了两个星期上下沒有发觉同歩不成功的状况。

3. 自然环境规定

文件网络服务器安裝cygwin,并安裝openssh和rsync服务项目

录课PC安裝cygwin并安裝openssh服务,开启22端口

配备录课室ssh信任感文件网络服务器

如何使用cygwin并开启openssh百度搜索材料有许多非常容易寻找

4. python脚本详细介绍

实际上脚本非常简单大约分为主导文件、日志涵数、电子邮件涵数及其配备文件几一部分。应用计划任务按时执行,能够保证自动同步文件,分辨同歩执行是否,执行結果载入日志,执行失败发送邮件给运维管理人员排查常见故障。

5. 时序图

6. 脚本源代码及表明

1)主文件

#!/usr/bin/env python

#coding:utf-8

#auther:Bran Guo

#date:11/07/2015

#description:视頻文件同歩脚本,加上计划任务后自启动

#version:V1.0

import os,ConfigParser,logger

conf = ConfigParser.ConfigParser()

conf.read("bakconf.ini")

dst_user = conf.get('destination','dst_user')

dst_ip = conf.get('destination','dst_ip')

dst_dir = conf.get('destination','dst_dir')

src_dir = conf.get('source','src_dir')

ret = os.system('rsync  -Paz %s@%s:%s %s' %(dst_user,dst_ip,dst_dir,src_dir))

logger.logger(ret)

os.system('chmod -R 777 %s/* ' % src_dir)

exit()

尤其简易的一个脚本便是应用configparser载入配备文件随后应用rsync同歩文件目录,最终改动管理权限和写日志。

2)日志文件

#!/usr/bin/python

import datetime,os,ConfigParser,sendmail

conf = ConfigParser.ConfigParser()

conf.read("bakconf.ini")

dst_ip = conf.get('destination','dst_ip')

bak_log = conf.get("log_file","bak_log")

sender = conf.get('mail','sender')

receiver = conf.get('mail','receiver')

subject = conf.get('mail','subject')

smtpserver = conf.get('mail','smtpserver')

username = conf.get('mail','username')

password = conf.get('mail','password')

def logger(ret):

if ret == 0:

echo_line = "%s\tBackup video file succes\n" % datetime.datetime.now()

else:

echo_line = "%s\tBackup video file failed, plz check.\n" % datetime.datetime.now()

sendmail.sendmail(sender,receiver,subject,smtpserver,username,password,echo_line,dst_ip)

f = file(bak_log,'a')

f.write(echo_line)

f.flush()

f.close()

一样的载入配备文件,随后根据主文件发送给的ret主要参数筹算指令执行結果,随后做相对的实际操作。从sender到password的主要参数是电子邮件的配备主要参数。

3)电子邮件文件

import smtplib,datetime

from email.mime.text import MIMEText

def sendmail(sender,receiver,subject,smtpserver,username,password,content,dsthost):

time = str(datetime.datetime.now)

msg = MIMEText(

'''

HOST: %s 

DESCRIPON: %s 

 
   

''' %(dsthost,content),'html','ascii')

msg['From'] = sender

msg['To'] = receiver

msg['Subject'] = subject

smtp = smtplib.SMTP()

smtp.connect('smtp.exmail.qq.com')

smtp.login(username, password)

smtp.sendmail(sender, receiver, msg.as_string())

smtp.quit()

应用smtplib控制模块的涵数,全部主要参数全是在logger中载入的配备文件取值的,msg是电子邮件內容。

4)配备文件

[source]

src_dir = /cygdrive/d/video

[destination]

dst_user =  destination host username

dst_ip = destination ip address

dst_dir = /cygdrive/d/video/

[log_file]

bak_log = backuplog.txt

[mail]

sender = [email protected]

receiver = [email protected]

subject = backup video failed

smtpserver = smtp.exmail.qq.com

username = [email protected]

password = password

配备文件必须留意的地区便是源途径和目地途径如果应用/cygdrive/d/video而不能用windows设计风格的d:\video。

5)文件目录构造

7.碰到的坑

配备文件中的客户要和录课PC中起动sshd服务项目的客户一直不然会出错。

不必应用Administrator,应用名都是小写字母的客户,linux是严苛区别英文大小写的因此 会出难题,ssh信任感认证走不过去。

文件网络服务器要改动PATH途径把cgywin的文件目录放进默认设置文件目录的前面那样能够优先选择应用cygwin的指令,或是仅用全途径。

配备计划任务的情况下的 ‘起起源于’ 一定要写脚本所属的文件目录,不然会出错。

热搜词

你可能感兴趣的:(cygwinrsync)