1。要求
企业是做在线教育的,所以老师的录音视频是非常重要的文件。视频必须每天从录制PC下载到文件网络服务器,并且必须保证文件的一致性。
2。文件同步软件的选择
最初应用的是全向同步。同步率还不错,11m左右,但是有一些失败,应用规划任务不一定成功。另一个难题是,它被用来提醒授权的人太频繁了,而没有寻找任何好的解密方法。
第二个手机软件是freefilesync。专业软件,应用sftp协议,缺陷是速度慢1m左右,而且因为是win的网络服务器,必须安装ssh软件才能开22口。而且也是同样成功的难题。
武器cygwin是在检测freefilesync的情况下发现的,然后我们决定是否使用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主参数计算指令执行结果,再做相对实际的 *** 作。从发件人到密码的主要参数是电子邮件的主要参数。
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( ''' <body> HOST: %s <br/> DESCRIPON: %s <br/> </body> <pre> ''' %(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为e-mail的内容。
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 = send@xxx.com receiver = receive@xxx.com subject = backup video failed smtpserver = smtp.exmail.qq.com username = send@xxxi.com password = password准备文件时必须注意的区域是源通道和目标通道。如果应用了/cygdrive/d/video,就不能使用d:\video的windows设计风格。
5)文件目录建设
7。坑
设备文件中的客户必须与记录PC中的客户一起启动sshd服务项目,否则会出错。
你不需要申请管理员。您需要申请姓名为小写字母的客户。linux区分英文大小写比较严格,所以会有问题。ssh信任认证无法通过。
文件服务器需要改变路径PATH把cgywin的文件目录放在默认文件目录前面,这样就可以优先使用应用cygwin的指令,或者只使用完整路径。
如果您配备了计划任务,则必须写入脚本所属的文件目录,否则会出错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)