python用作监控

  • 2020 年 1 月 14 日
  • 筆記

一.python日志模块

二.python数据库连接

三.时间处理模块

四.python传递参数给shell

五.发送邮件(py2.7)

六.python计划任务

七.supervisor

/etc/supervisor.conf  [program:check]  command = python /data/remote_back/checkbackup.py  directory = /data/remote_back  user = root    root@GS_TMN_Data:[/data/remote_back]supervisorctl   check          RUNNING    pid 5771, uptime 19:15:25

八.综合实例

#coding:utf-8  import threading  import MySQLdb  from datetime import datetime  import time,os  import smtplib  from email.mime.text import MIMEText  #from log import logger  import logging  def get_log():      logging.basicConfig(level=logging.DEBUG,      format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',      datefmt='%a, %d %b %Y %H:%M:%S',      filename='myapp.log',      filemode='w')      logger = logging.getLogger('root')      return logger  def get_con():      host = "120.138.75.88"      port = 5849      logsdb = "serverlist"      user = "xxxx"      password = "xxxxx"      con = MySQLdb.connect(host=host, user=user, passwd=password, db=logsdb, port=port, charset="utf8")      return con    def calculate_time():      now = time.mktime(datetime.now().timetuple())-60*2      result = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(now))      return result  def backup_time():      now = time.mktime(datetime.now().timetuple())-60*2      result = time.strftime('%Y%m%d', time.localtime(now))      backupresult = str(result)      return backupresult      def get_data(agent):      select_time = calculate_time()      get_log().info("select time:"+select_time)      sql = 'SELECT COUNT(DISTINCT gamedatadbname) FROM gameserverinfo WHERE agent="%s" and isdelete!=1  ORDER BY zone' %(agent)      conn = get_con()      cursor = conn.cursor()      cursor.execute(sql)      results = cursor.fetchall()      num1 = results[0]      num = num1[0]      cursor.close()      conn.close()      return num  def get_backupdata(agent):  #    backupnum = os.popen('ls *`date +%Y%m%d04`* |wc -l').read().strip('n')      shijian = '*' + backup_time() + '04' +'*'      guize = "%s" %(agent) + shijian      os.environ['guize'] = str(guize)      backupnum = os.popen('ls $guize |wc -l').read().strip('n')      return backupnum        def check():      numdata = int(get_data('ynvng'))      backupnum = int(get_backupdata('ynvng'))      if numdata == backupnum:          result = "备份成功"      else:          result = "备份失败"      return result  def send_email(content):         sender = "[email protected]"      receiver = ["[email protected]","[email protected]"]      host = 'smtp.163.com'      port = 465      msg = MIMEText(content)      msg['From'] = "[email protected]"      msg['To'] = "[email protected]"      msg['Subject'] = "vng backup check"         try:          smtp = smtplib.SMTP_SSL(host, port)          smtp.login(sender, 'xxxx')          smtp.sendmail(sender, receiver, msg.as_string())          get_log().info("send email success")      except Exception, e:          get_log().error(e)  #	print e  def task():  #    get_data = get_data()  #    get_backupdata= get_backupdata()      while True:      	data = get_data('ynvng')      	backupdata= get_backupdata('ynvng')    	shijian = backup_time()          get_log().info("monitor running")          results = check()    	print results  	get_log().info(results)          if results == "备份成功":              content = "越南备份成功"          else:              content = "越南备份失败"  	print content,data,backupdata          send_email(content + " 备份时间:" + shijian + "   应该备份个数: " + str(data) + "   备份个数:" +  str(backupdata))          time.sleep(720*60)    def run_monitor():      monitor = threading.Thread(target=task)      monitor.start()        if __name__ == "__main__":      run_monitor()

九.运行效果