python初级实战-----主机在线情况监控web

一、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\] + "\\n")
    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\] + "\\n")
    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\] + "\\n")
    fp.close()
    print("写入完成,共写入%d条数据……" % loan\_count)
    f = os.system('sh fping.sh')
 
    content = open('result.txt','r')
    first= content.read().split('\\n')
    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\] + "\\n")
    fp.close()
    f = os.system('sh fping.sh >> checkip.log 2>&1')
 
    content = open('result.txt','r')
    first= content.read().split('\\n')  #通过指定分隔符对字符串进行切片
    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 %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="/">PMSystem</a>
        </div>
        <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li><a href="/">主机在线平台</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
  {% block page\_content %}{% endblock %}
</div>
{% endblock %}

建立index.html

{% extends "base.html" %}
 
{% block title %}主机平台{% endblock %}
 
{% block page\_content %}
    <table class="table table-bordered">
    <tr>
        <th>序号</th>
        <th>IP地址</th>
        <th>服务</th>
        <th>是否在线</th>
    </tr>
        {% for i in u %}
            <tr>
                <td>{{ i\[0\] }}</td>
                <td>{{ i\[1\] }}</td>
                <td>{{ i\[2\] }}</td>
                <td>{{ i\[3\] }}</td>
            </tr>
    {% endfor %}
    </table>
 
{% 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 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8c6dfa83386840d39f78c0619ffe2367.png)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/412a55494faa4ba59842ce4f1d0f8354.png)

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ddff4e88c4414c34a5c5d9afc623a78f.png)

👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7461afb66cdb46f98dfe252fa636b0bb.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e634e4dd454b4e72ad3e8a4054205499.png)

👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d738723e44ae4243acde9692a708453a.png)

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】
![请添加图片描述](https://img-blog.csdnimg.cn/direct/dca6431705d24eb493e8a04df7d09706.jpeg)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值