• 云平台服务运行情况检测脚本V0.1


    1、准备Python3环境

        

    yum groupinstall "Development tools" -y
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
    cd /usr/local/software && wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
    tar zxvf Python-3.6.2.tgz
    cd Python-3.6.2
    ./configure -prefix=/usr/local/python -enable-shared
    make && make install
    ln -s /usr/local/python/bin/python3 /usr/bin/python3
    
    3、在运行Python之前需要配置库:
    
    echo /usr/local/python/lib >> /etc/ld.so.conf.d/local.conf && ldconfig
    
    4、运行演示:
    python3 -V
    Python 3.6.2
    
    5、升级一下pip
    pip3 install --upgrade pip

    2、脚本内容 /usr/local/checkall.py

    执行方式:

    cd /usr/local/

    python3 checkall.py

    import subprocess as t
    import time
    import os, sys
    import socket
    import requests
    import redis
    
    # ===============================================================================================================
    # pip3 install requests
    # pip3 install redis
    # ===============================================================================================================
    # 地区名称
    Area_Name = '199测试服务器'
    
    # 是否需要检查Tomcat2
    NeedCheckTomcat2 = False
    
    # 数据库所在的IP
    DB_IP = '127.0.0.1'
    
    # WEB所在的IP
    WEB_IP = '127.0.0.1'
    
    RedisPort = 6379
    NeedCheckPort = {'MYSQL服务': 22066, 'REDIS服务': RedisPort, 'SSDB服务': 8888, 'NGINX服务': 80, 'ICOMET服务': 8000,
                     'RABBITMQ服务': 4369}
    
    SphinxList = ['/usr/local/sphinx/etc/csft.conf',
                  '/usr/local/sphinx/etc/csft_member.conf',
                  '/usr/local/sphinx/etc/csft_paper.conf',
                  '/usr/local/sphinx/etc/csft_tk.conf',
                  '/usr/local/sphinx/etc/csft_tk_my.conf',
                  '/usr/local/sphinx/etc/csft_group.conf',
                  '/usr/local/sphinx/etc/csft_my.conf',
                  '/usr/local/sphinx/etc/csft_paper_my.conf',
                  '/usr/local/sphinx/etc/csft_cloud.conf',
                  '/usr/local/sphinx/etc/csft_wkds.conf',
                  '/usr/local/sphinx/etc/csft_publish.conf',
                  '/usr/local/sphinx/etc/csft_publish_resource.conf',
                  '/usr/local/sphinx/etc/csft_publish_paper.conf',
                  '/usr/local/sphinx/etc/csft_publish_wk.conf',
                  '/usr/local/sphinx/etc/csft_zy.conf',
                  '/usr/local/sphinx/etc/csft_news.conf',
                  '/usr/local/sphinx/etc/csft_kyyj.conf',
                  '/usr/local/sphinx/etc/csft_xzt.conf',
                  '/usr/local/sphinx/etc/csft_hd.conf',
                  '/usr/local/sphinx/etc/csft_allpublish.conf',
                  '/usr/local/sphinx/etc/csft_wktostudent.conf',
                  '/usr/local/sphinx/etc/csft_bbs_topic.conf',
                  '/usr/local/sphinx/etc/csft_bbs_post.conf',
                  '/usr/local/sphinx/etc/csft_notice.conf',
                  '/usr/local/sphinx/etc/csft_blog_article.conf',
                  '/usr/local/sphinx/etc/csft_supervise.conf',
                  '/usr/local/sphinx/etc/csft_seach.conf'
                  ]
    
    
    # ===============================================================================================================
    # 检查指定IP的服务端口
    def check_port(address, port):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(3)
        try:
            s.connect((address, port))
            s.close()
            return True
        except Exception as e:
            s.close()
            return False
    
    
    # 检查磁盘
    def check_disk():
        # 检查是不是存在指定的MOUNT盘
        var = t.getoutput("df -h | cat -n ")
        success = False
        for line in var.split("
    "):
            if '/usr/local/tomcat7/webapps/dsideal_yy/html/down' in line:
                success = True
        if not success:
            return False
        # 尝试写入文件,是不是正常
        try:
            testFile = '/usr/local/tomcat7/webapps/dsideal_yy/html/down/test.txt'
            with open(testFile, 'w') as data:
                print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())), file=data)  # 输出默认为sys.stdout
                success = True
            os.remove(testFile)
        except IOError as err:
            success = False
        return success
    
    
    # 检查服务端口
    def check_serviceport():
        for (k, v) in NeedCheckPort.items():
            success = check_port(DB_IP, NeedCheckPort[k])
            if not success:
                return k
    
    
    # 检查 Tomcat
    def check_Tomcat():
        var = t.getoutput("ps -ef | grep tomcat")
        success = False
        for line in var.split("
    "):
            if '/usr/local/tomcat7/conf/logging.properties' in line:
                success = True
    
        if not success:
            return False
    
        # 判断是不是 Tomcat僵死掉
        try:
            requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaText", timeout=1)
        except requests.exceptions.ConnectTimeout:
            return False
        except requests.exceptions.Timeout:
            return False
    
        # 判断验证码是不是能正常生成?
        r = requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaText")
        if r.status_code != 200:
            return False
        else:
            # 下载图片
            try:
                r = requests.get("http://" + WEB_IP + "/dsideal_yy/adminlogin/captchaImage?text=" + r.json()['text'])
                with open('/usr/local/software/picture.jpg', 'wb') as file:
                    file.write(r.content)
                # 用完就删除了吧
                os.remove('/usr/local/software/picture.jpg')
                return True
            except Exception as err:
                print('Tomcat检查发现异常:' + str(err))
                return False
    
    
    # 判断 Tomcat2
    def check_Tomcat2():
        var = t.getoutput("ps -ef | grep tomcat")
        success = False
        for line in var.split("
    "):
            if '/usr/local/tomcat7_2/conf/logging.properties' in line:
                success = True
        return success
    
    
    # 检查是否存在检查挂盘定时任务
    def check_disk_crontab():
        file = open('/etc/crontab')
        success = False
        for line in file:
            # 每分钟进行检查
            if '* * * * * root  /usr/local/checkdisk.sh > /dev/null 2>&1' in line:
                success = True
        file.close()
        return success
    
    
    # 检查磁盘的定时脚本是不是与启动脚本中的挂载方式一致
    def check_diskShAndRcLocal():
        typeA = ''
        file = open('/usr/local/checkdisk.sh')
        for line in file:
            if 'sshfs -o nonempty,allow_other,reconnect' in line:
                typeA = 'ssh'
            if 'mount -t cifs -o' in line:
                typeA = 'samba'
        file.close()
    
        typeB = ''
        file = open('/etc/rc.d/rc.local')
        for line in file:
            if 'sshfs -o nonempty,allow_other,reconnect' in line:
                typeB = 'ssh'
            if 'mount -t cifs -o' in line:
                typeB = 'samba'
        file.close()
    
        if typeA == 'ssh':
            print("########################################################################################")
            print('########发现现在在使用sshfs方式挂盘,如果可能 ,还是建议使用samba的方式进行挂盘!########')
            print("########################################################################################")
        if typeA == typeB and typeA != '':
            return True
        else:
            return False
    
    
    # 检查处理程序的状态
    def checkWinFormExist():
        try:
            r = redis.Redis(host=DB_IP, port=RedisPort, db=0)
            # r.set('WinForm_GetSwf',11111)
            ret = r.get('WinForm_GetSwf')
            if ret is None:
                return False
            else:
                return True
        except Exception as err:
            print('Redis访问异常:' + str(err))
            return False
    
    
    # 检查sphinx服务状态
    def checkSphinx():
        for c in SphinxList:
            var = t.getoutput('ps -ef | grep ' + c + ' | grep -v grep')
            n = 0
            for line in var.split("
    "):
                n = n + 1
    
            if n == 0:
                print('Sphinx检查失败:' + c)
                return c
    
    
    # 检查sphinx 定时增量索引的配置是否正确
    def checkSphinxInc():
        SphinxShList = []
        for c in SphinxList:
            a = c.replace('.conf', '.sh').replace('/usr/local/sphinx/etc/', '/usr/local/sphinx_sh/')
            SphinxShList.append(a)
    
        for c in SphinxShList:
            Found = False
            with open('/etc/crontab', 'r') as f:
                for line in f:
                    if c in line:
                        Found = True
                        break
                    else:
                        Found = False
                if not Found:
                    return c
    
    
    # 检查sphinx 在自启动脚本中是不是存在
    def checkSphinxRcLocal():
        for c in SphinxList:
            with open('/etc/rc.d/rc.local', 'r') as f:
                Found = False
                for line in f:
                    if c in line:
                        Found = True
                        break
                    else:
                        Found = False
                if not Found:
                    return c
    
    
    if __name__ == "__main__":
        # 检查磁盘
        if not check_disk():
            print('1、磁盘检查失败,请马上处理!')
            sys.exit()
        else:
            print('1、磁盘检查成功!')
    
        # 检查Tomcat
        if not check_Tomcat():
            print('2、Tomcat检查失败,请马上处理!')
            sys.exit()
        else:
            print('2、Tomcat检查成功!')
    
        # 检查Tomcat2,各地区不一样,有的需要进行检查
        if NeedCheckTomcat2:
            if not check_Tomcat2():
                print('3、Tomcat_2检查失败,请马上处理!')
                sys.exit()
            else:
                print('3、Tomcat_2检查成功!')
    
        # 检查端口
        ret = check_serviceport()
        if ret != None:
            print('4、' + ret + '端口检查失败,请马上处理!')
            sys.exit()
        else:
            print('4、端口检查成功!')
    
        # 检查定时磁盘检查
        if not check_disk_crontab():
            print('5、磁盘定时探测服务检查失败,请马上处理!')
            sys.exit()
        else:
            print('5、磁盘定时探测服务检查成功!')
    
        # 检查磁盘探测程序是不是与启动脚本中的挂载磁盘方式一致?
        if not check_diskShAndRcLocal():
            print('6、磁盘挂载方式不一致,请马上处理!')
            sys.exit()
        else:
            print('6、磁盘挂载方式一致性检查成功!')
    
        # 检查处理程序的状态
        if not checkWinFormExist():
            print('7、处理程序没有正确开启,请马上处理!')
            sys.exit()
        else:
            print('7、处理程序检查成功!')
    
        # 检查Sphinx服务状态
        ret = checkSphinx()
        if ret != None:
            print('8、检查Sphinx失败,' + ret + ',请马上处理!')
            sys.exit()
        else:
            print('8、检查Sphinx成功完成!')
    
        # 检查Sphinx增量脚本的编写
        ret = checkSphinxInc()
        if ret != None:
            print('9、检查Sphinx增量索引失败,' + ret + ',请马上处理!')
            sys.exit()
        else:
            print('9、检查Sphinx增量索引完成!')
    
            # 检查Sphinx自启动脚本的编写
            ret = checkSphinxRcLocal()
            if ret != None:
                print('10、检查Sphinx自启动脚本失败,' + ret + ',请马上处理!文件位置:/etc/crontab')
                sys.exit()
            else:
                print('10、检查Sphinx自启动脚本完成!')
    
        print('恭喜,所有检查成功完成!没有发现异常!')
  • 相关阅读:
    浅谈树状数组与线段树
    BZOJ1367:[Baltic2004]sequence
    浅谈左偏树
    BZOJ4003:[JLOI2015]城池攻占
    BZOJ2809:[APIO2012]dispatching
    BZOJ1455:罗马游戏
    模拟ssh远程执行命令
    基于TCP协议的socket套接字编程
    计算机网络基础知识
    元类( 控制对象产生和控制类产生)模板
  • 原文地址:https://www.cnblogs.com/littlehb/p/7453599.html
Copyright © 2020-2023  润新知