博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Crontab Build_setting的定期检查
阅读量:5268 次
发布时间:2019-06-14

本文共 5391 字,大约阅读时间需要 17 分钟。

一、脚本功能

(1)检查所有的builting_setting.h是否能够编译通过,并将编译结果写入 编译结果.h文件中。

(2)将编译结果通过邮箱发送给相关负责人。

(3)系统定期执行任务,检查build_setting。

 

二、发送邮件

   1、要实现发邮件的功能,必须通过网站登陆设置开启SMTP服务和授权码,比如以下是163邮箱的设置过程。

    

  2、在脚本此处设置邮箱的相关内容:(注意:邮箱密码必须是你启用的授权码

  

三、crontab定时作业

(1)crontab -e:通过这个命令创建自己的定时作业

  

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数crontab -l //列出某个用户cron服务的详细内容crontab -r //删除某个用户的cron服务crontab -e //编辑某个用户的cron服务

 

*   |代表任何时刻均可执行.,   |代表分隔时段,例如要在3:00和6:00两个时刻执行命令:```0 3,6 * * * command```-   |代表范围,例如要在8:20,9:20,10:20三个时刻执行命令:```20 8-10 * * * command```/n  |代表间隔,例如每10分钟执行一次命令:```*/10 * * * * command```注意时间与星期不能同时设置,例如下面就是一个错误的写法:

 

(2)启动crontab服务:service cron start

(3)关闭服务:service cron stop

(4)查看crontab服务:crontab  -l

(5)删除定时作业:crontab  -r

(6)查看crontab服务的状态:service cron status   

如:每隔10MIN启动一次脚本

*/10 * * * *  python /home/kk/share/bak/512_new/code/kitking/buildCheck.py

 一般设置环境变量的时候,Linux会在/etc/profile里面配置,这样子用户登录,读取这个文件的时候就会读取到配置文件,所有正常的bash shell登录都可以执行我们的脚本。但是crontab就不一样了,在红帽系列的Linux上面,可以在/etc/crontab下发现有重新设置环境变量。

注意crontab运行是的环境变量需要手动添加:

cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed

手动添加如下:

 

四、脚本检查:

#!/usr/bin/python#_*_ coding:utf-8 _*_import timefrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEBase import MIMEBasefrom email import Utils, Encodersfrom email.header import Headerimport mimetypesimport sysimport smtplibimport getoptimport osimport reimport shutilimport time, datetime'''脚本功能:     (1)检查所有的builting_setting.h是否能够编译通过,并将编译结果写入 buildLog文件中。     (2)将编译结果通过邮箱发送给负责人。     (3)系统定期执行任务,检查build_setting。     注意:SRC的绝对路径更新:gPathSrc'''gPathSrc = u"/home/kk/share/bak/512_new/code"gPathBuildList = gPathSrc + u"/kitking/buildList.h"gPathBuildLog = gPathSrc + u"/kitking/buildLog.h"def SearchbinFile(curBuildName):    global gPathSrc    binFilepath = gPathSrc + "/mergedir"    IsFindfile = 0        for filename in os.listdir(binFilepath):        if (re.search(".*RR.*\.bin.*",filename)):            IsFindfile = 1            break        else:            IsFindfile = 0    if IsFindfile == 0:        if (os.path.isfile(gPathBuildList)):            open(gPathBuildLog, "a").writelines(curBuildName)        else:            open(gPathBuildLog, "w").writelines(curBuildName)def Compile():    buildList = []    strCurBuildName = ""    #查看清单文件    if(os.path.isfile(gPathBuildList)):        buildList = open(gPathBuildList, "r").readlines()    #无清单任务,需要重新产生    if(len(buildList) == 0):        for  dirPath, dirNames, fileNames in os.walk(gPathSrc + "/../BUILD_RECORD"):            for strCurBuildName in dirNames:                buildList.append(strCurBuildName+"\n")    #每次移除一个任务后,更新清单文件    if(len(buildList)):        strCurBuildName = buildList.pop()        open(gPathSrc + "/../BUILD_RECORD/BUILD_NOW.h", "w").write("#define BUILD_NAME " + strCurBuildName)        os.system(gPathSrc + "/build_history.sh")        SearchbinFile(strCurBuildName)    if (len(buildList)):        open(gPathBuildList, "w").writelines(buildList)    else:        # 注意:附件的路径字符串应为unicode编码        # 发送者邮箱 接收者邮箱   邮箱密码 主题   内容  附件名        SendMail('rad_xxx@163.com', 'xxx@163.com', 'xxx','编译结果','请查看Log!',gPathBuildLog)        os.remove(gPathBuildLog)        os.remove(gPathBuildList)def SendMail(fromAddress, toAddress, usepassword,subject=None, content=None, attfile=None, \             subtype='plain', charset='utf-8'):      username = fromAddress        #创建一个带附件的实例    msg = MIMEMultipart()    msg['From'] = fromAddress      msg['To'] = toAddress      if subject:            #标题        msg['Subject'] = subject        msg['Date'] = Utils.formatdate(localtime=1)        if content:        #添加邮件内容        txt = MIMEText(content, subtype, charset)          msg.attach(txt)              if attfile:        #构造附件          #注意:传入的参数attfile为unicode,否则带中文的目录或名称的文件读不出来          #      basename 为文件名称,由于传入的参数attfile为unicode编码,此处的basename也为unicode编码          basename = os.path.basename(attfile)          #print basename        #注意:指定att的编码方式为gb2312          att = MIMEText(open(attfile, 'rb').read(), 'base64', 'gb2312')          att["Content-Type"] = 'application/octet-stream'                    #注意:此处basename要转换为gb2312编码,否则中文会有乱码。          #      特别,此处的basename为unicode编码,所以可以用basename.encode('gb2312')          #            如果basename为utf-8编码,要用basename.decode('utf-8').encode('gb2312')          att["Content-Disposition"] = 'attachment; filename=%s' % basename.encode('gb2312')          msg.attach(att)        try:      #smtp = smtplib          smtp = smtplib.SMTP()                  #连接服务器        smtp.connect('smtp.163.com', '25')        #登录        smtp.login(username, usepassword)        #发送邮件            smtp.sendmail(fromAddress, toAddress, msg.as_string())          #退出        smtp.quit()          print('邮件发送成功email has send out !')      except Exception as e:        print str(e)   if __name__ == "__main__":    #获取脚本所在的绝对路径    AbsolutePath = sys.path[0]    #切换目录进行编译    os.chdir(gPathSrc)    #编译    Compile()    #sys.exit(1)

 

转载于:https://www.cnblogs.com/jiangzhaowei/p/8067236.html

你可能感兴趣的文章
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
基于CMMI的敏捷开发过程文档裁剪
查看>>
0925 韩顺平java视频
查看>>
软件需求规格说明书
查看>>
53. Maximum Subarray
查看>>
iOS-程序启动原理和UIApplication
查看>>
SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器...
查看>>
git的安装
查看>>
mysql 8.0 zip包安装
查看>>
Spring框架系列(三)--Bean的作用域和生命周期
查看>>
springboot + mybatis
查看>>
awk 统计
查看>>
CSS min-height 属性
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
Linux发行版的排行
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>