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的指令,或是仅用全途径。
配备计划任务的情况下的 ‘起起源于’ 一定要写脚本所属的文件目录,不然会出错。
热搜词