背景

公司有600多台服务器,打算写一个小程序,能一眼看见哪些服务器不在线。

大体思路是:

1、把所有服务器ip存进数据库,ping命令判断服务器是否在线

2、更新数据库中ip的状态

3、简单的web显示出来

4、优化程序,美观页面

一、python检测IP在线

fping命令,它是对一个文件的批量ping,瞬间完成的,如果ping不通,那就较慢,日常ping不通的毕竟是少数,所以这个非常适用。

这个命令需要安装,直接yum就行,yum install fping -y

创建fping.sh的shell脚本

#!/bin/bash

rm -f result.txt

cat ipmi_ping.txt | fping > result.txt

执行结果:

二、读取mysql数据

1、创建一张数据表,存放ip等信息

#创建一个表

create table ip_table(

id int auto_increment, #id自增

ipaddress char(15) not null, #地址禁止为空

application char(24),

status char(6),

primary key(id)

);

#插入部分数据

insert into ip_table values(id,'10.30.0.101','邮箱服务器','在线');

insert into ip_table values(id,'10.1.100.1','核心交换机','在线');

insert into ip_table values(id,'10.1.50.30','开发库','在线');

insert into ip_table values(id,'10.1.80.115','openstack控制节点','在线');

insert into ip_table values(id,'10.1.80.116','openstack计算节点','在线');

insert into ip_table values(id,'10.1.80.117','openstack块存储节点','在线');

commit;

2、python实现读取数据表中的内容,并写入到一个本地文件

# -*- coding:utf-8 -*-

import pymysql

def get_loan_number(file):

connect = pymysql.connect(

host="10.1.80.200",

port=3306,

user="alex",

passwd="alex",

db="ip",

charset='utf8'

)

print("写入中,请等待……")

cursor = connect.cursor() #获取游标

sql = "select ipaddress from ip_table" #执行的sql

cursor.execute(sql) #执行数据库操作

number = cursor.fetchall() #查询并返回所有结果

fp = open(file, "w")

loan_count = 0

for loanNumber in number:

loan_count += 1

fp.write(loanNumber[0] + " ")

fp.close()

cursor.close() #关闭指针对象

connect.close() #关闭数据库连接

print("写入完成,共写入%d条数据……" % loan_count)

if __name__ == "__main__":

file = r"loanNUmber.txt"

get_loan_number(file)

二、执行fping脚本,并将结果输出到result文件

# -*- coding:utf-8 -*-

import pymysql

import os

def get_loan_number(file):

connect = pymysql.connect(

host="localhost",

port=3306,

user="root",

passwd="12345678",

db="ip",

charset='utf8'

)

print("写入中,请等待……")

cursor = connect.cursor() #获取游标

sql = "select ipaddress from ip_table" #执行的sql

cursor.execute(sql) #执行数据库操作

number = cursor.fetchall() #查询并返回所有结果

fp = open(file, "w")

loan_count = 0

for loanNumber in number:

loan_count += 1

fp.write(loanNumber[0] + " ")

fp.close()

cursor.close() #关闭指针对象

connect.close() #关闭数据库连接

print("写入完成,共写入%d条数据……" % loan_count)

f = os.system('sh /ping/fping.sh')

if __name__ == "__main__":

file = r"ipmi_ping.txt"

get_loan_number(file)

三、读result.txt文件,将IP is unreachable的行提取更新状态"不在线’

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import pymysql

import os

def get_loan_number(file):

connect = pymysql.connect(

host="localhost",

port=3306,

user="root",

passwd="12345678",

db="checkip",

charset='utf8'

)

print("写入中,请等待……")

cursor = connect.cursor() #获取游标

sql = "select ipaddress from ip_table" #执行的sql

cursor.execute(sql) #执行数据库操作

number = cursor.fetchall() #查询并返回所有结果

fp = open(file, "w")

loan_count = 0

for loanNumber in number:

loan_count += 1

fp.write(loanNumber[0] + " ")

fp.close()

print("写入完成,共写入%d条数据……" % loan_count)

f = os.system('sh fping.sh')

content = open('result.txt','r')

first= content.read().split(' ')

for i in range(0,len(first)-1):

tmp = first[i]

ip = tmp[:tmp.index('is')-1]

status = '在线'

if 'unreachable' in tmp:

status = '离线'

cursor.execute('update ip_table set status ="%s" where ipaddress ="%s"'%(status,ip))

connect.commit()

content.close()

cursor.close() #关闭指针对象

connect.close() #关闭数据库连接

if __name__ == "__main__":

file = r"ipmi_ping.txt"

get_loan_number(file)

此时已经可以在数据库中看见status发送了变化。

四、设置get_loan_number每秒执行

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import pymysql

import os

import time

def get_loan_number(file):

connect = pymysql.connect(

host="localhost",

port=3306,

user="root",

passwd="12345678",

db="checkip",

charset='utf8'

)

cursor = connect.cursor() #获取游标

sql = "select ipaddress from ip_table" #执行的sql

cursor.execute(sql) #执行数据库操作

number = cursor.fetchall() #查询并返回所有结果

fp = open(file, "w")

loan_count = 0

for loanNumber in number:

loan_count += 1

fp.write(loanNumber[0] + " ")

fp.close()

f = os.system('sh fping.sh >> checkip.log 2>&1')

content = open('result.txt','r')

first= content.read().split(' ') #通过指定分隔符对字符串进行切片

for i in range(0,len(first)-1):

tmp = first[i]

ip = tmp[:tmp.index('is')-1]

status = '在线'

if 'unreachable' in tmp:

status = '离线'

cursor.execute('update ip_table set status ="%s" where ipaddress ="%s"'%(status,ip))

connect.commit()

content.close()

cursor.close() #关闭指针对象

connect.close() #关闭数据库连接

while True:

get_loan_number(r"ipmi_ping.txt")

time.sleep(3)

五、设计web提取mysql数据

这里我用了flask框架,因为简单好用。

首先安装python第三方模块:

pip3 install flask

pip3 install flask_bootstrap

pip3 install pymysql

建立base.html

{% extends "bootstrap/base.html" %}

{% block title %}Flask{% endblock %}

{% block navbar %}

Toggle navigation

PMSystem

主机在线平台

{% endblock %}

{% block content %}

{% block page_content %}{% endblock %}

{% endblock %}

建立index.html

{% extends "base.html" %}

{% block title %}主机平台{% endblock %}

{% block page_content %}

序号 IP地址 服务 是否在线

{% for i in u %}

{{ i[0] }} {{ i[1] }} {{ i[2] }} {{ i[3] }}

{% endfor %}

{% endblock %}

建立app.py

from flask import Flask

from flask import render_template

from flask_bootstrap import Bootstrap

import pymysql

app = Flask(__name__)

bootstrap = Bootstrap(app)

@app.route('/')

def index():

conn = pymysql.connect(host='10.1.80.110', user='alex', password='alex', db='checkip', charset='utf8')

cur = conn.cursor()

sql = "SELECT * FROM ip_table"

cur.execute(sql)

u = cur.fetchall()

conn.close()

return render_template('index.html',u=u)

if __name__ == '__main__':

app.run(host='0.0.0.0',debug=True)

运行一下程序:

初步实现了需求。

六、设置后台执行

nohup /python3/bin/python3.5 -u ping.py >> ping.log

nohup /python3/bin/python3.5 -u app.py >> app.log 2>&1 &

python在线读-python初级实战-----主机在线情况监控web相关推荐

  1. 计算机语言python怎么读,python编程怎么读音发音

    python 怎么读 python,英[ˈpaɪθən],美[ˈpaɪθɑːn],英['paɪθən]:发音有点像"派森" 或 "派粉",注意中间那个 θ 音, ...

  2. python在线读-Python电子书免费分享

    Python的教程很多,如果大家不想看网络教程,可以把教程下载到本地.本人最近从网络上找到一些Python教程书籍,整理如下,大家如果需要可以去下载. No.1 简明 Python 教程(byte t ...

  3. python是什么意思怎么读-python怎么读(python怎么读中文)

    Python具有简单,易学,免费,开源,可扩展,可嵌入,面向对象等优点.其面向对象的功能甚至比java和c#.net更为完善,并且可以与C++完美集成.两者可以称为"黄金油".我相 ...

  4. python这个怎么读-python怎么读(python怎么读中文)

    Python具有简单,易学,免费,开源,可扩展,可嵌入,面向对象等优点.其面向对象的功能甚至比java和c#.net更为完善,并且可以与C++完美集成.两者可以称为"黄金油".我相 ...

  5. Python怎么读, Python能做什么,可以自学Python吗?

    短时间掌握一门技能是现代社会的需求.生活节奏越来越快,现在不是大鱼吃小鱼,而是快鱼吃慢鱼的时代,人的时间比机器的时间更值钱.Python作为一种轻量级编程语言,语言简洁开发快,没那么多技巧,受到众多追 ...

  6. 编程中python怎么读-python之文件读写

    本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...

  7. python怎么读-Python怎么读?为什么叫Python?

    Python这门编程语言被越来越多的人追捧,大家现在都知道Python是一门应用很广泛的语言,在WEB开发.人工智能.数据分析等领域都得到广泛的应用,不过今天并不是要说Python在这些领域有多重要, ...

  8. 编程python怎么读-python怎么读sql数据?

    python中读取SQL数据的方法: python中可以使用游标cursor来读取SQL中的数据,游标cursor是由连接创建的对象,可以在游标中执行查询,并设置数据返回的格式. 当执行select语 ...

  9. 编程中python怎么读-Python编程怎么学习好?老男孩Python入门

    怎么学习Python编程呢?Python是一门计算机编程语言,同时也是一门入行IT行业的首先语言,学习一门新技术最重要的就是去掌握学习方法,对于Python学习来说,对于新手来说相对于是非常简单的,而 ...

最新文章

  1. 1039 Course List for Student
  2. spring aop 申明了切面类之后,如何申明切入点呢?
  3. 2018.5.18信息安全铁人三项赛数据赛复现
  4. RabbitMQ实现工作队列
  5. ffplay.c学习-4-⾳频输出和⾳频重采样
  6. 游戏服务器维护启动需要多久,游戏服务器开机需要多长时间
  7. asp.net Core2.1连接到Mysql 数据库
  8. Python数据处理Tips数据预处理操作方法汇总
  9. matlab用于试验设计回归分析实验结果的例子
  10. Web 前端:知道这些,至少有底气去面试了
  11. 网络编程 write 阻塞和非阻塞下的区别
  12. java BBS论坛
  13. 机器学习_深度学习毕设题目汇总——漫画
  14. 关于nrm ls时,*(星号)消失问题
  15. 手机怎么申请邮箱?手机邮箱下载
  16. 量子计算机的研究进展,量子计算原理及研究进展.pdf
  17. 记录一下从Windows到Mac的迁移
  18. 第十三周 任务一
  19. python学习笔记 第五章(科赫雪花与科赫曲线)
  20. 给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合

热门文章

  1. 分布式系统的Raft算法——在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新 意味着还是可能丢数据!!!...
  2. splunk的统计分析功能——特定字段的统计功能包括取值分布(+topK,min/max/平均值)...
  3. VMware 无法打开内核设备 \\.\Global\vmx86
  4. OpenGL_Qt学习笔记之_05(纹理映射)(转)
  5. 网站用域名能访问,用域名IP不能访问的原因分析
  6. linux卸载rpm包
  7. 单元测试中,模拟一个新对象
  8. WPF DatePicker默认显示当前日期,格式化为年月日(转)
  9. 00设计模式——指导规则
  10. Python 调试:step into/step out/step over 的区别