zoukankan      html  css  js  c++  java
  • Crontab Build_setting的定期检查

    一、脚本功能

    (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/crontab
    
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=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 time
    from email.MIMEText import MIMEText
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEBase import MIMEBase
    from email import Utils, Encoders
    from email.header import Header
    import mimetypes
    import sys
    import smtplib
    import getopt
    import os
    import re
    import shutil
    import 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+"
    ")
    
        #每次移除一个任务后,更新清单文件
        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)
  • 相关阅读:
    [转载]ASP.NET实现数字和字符相混合的验证码
    [分享]软件开发全套规范
    [转载]混沌理论简介
    [原创]利用WM_COPYDATA实现进程间通信
    [转载]I like the subtle...
    [原创]DES算法的介绍以及实现(含上次DES程序1.0的源码)
    [转载]高校自动排课系统的实践
    [公告]对DES算法源码的bug道歉
    [转载]基于混沌理论的资本投资研究
    使用 异步多线程TCP Socket 实现进程间通信(VC 6.0 , BCB6.0调试通过)
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/8067236.html
Copyright © 2011-2022 走看看