目的:定期将df -h的信息写入数据库,方便随时查询,观察数据增长情况

这里使用python3,Centos7默认没安装python3,需手动安装

1、安装 Python3

自行配置好yum源,这里使用在线安装

# 设置阿里云YUM源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清理 YUM 缓存并更新软件包列表
yum clean all
yum makecache

# 安装 gcc
yum install -y gcc gcc-c++

# 安装 Python3 (脚本中的 pyodbc 需要python36-devel)
yum install -y python36-devel python3

# 安装 unixODBC
yum install -y unixODBC-devel

# 安装 pyodbc
pip3 install pyodbc

# 验证安装情况
python3.6 --version

2、安装Microsoft ODBC Driver for SQL Server

按照以下顺序进行安装,下载

01-unixODBC-2.3.11-1.rh.x86_64

02-msodbcsql17-17.9.1.1-1.x86_64

03-mssql-tools-17.9.1.1-1.x86_64

也可以从微软官方网站自行下载其他版本

链接: https://packages.microsoft.com/rhel/7/prod/Packages/

rpm -ivh 01-unixODBC-2.3.11-1.rh.x86_64.rpm
rpm -ivh 02-msodbcsql17-17.9.1.1-1.x86_64.rpm
rpm -ivh 03-mssql-tools-17.9.1.1-1.x86_64.rpm

3、创建数据库表

CREATE TABLE [DiskUsage](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Timestamp] [datetime] NULL,
	[Filesystem] [varchar](200) NULL,
	[Sizes] [varchar](200) NULL,
	[Used] [varchar](200) NULL,
	[Avail] [varchar](200) NULL,
	[UsePercent] [varchar](200) NULL,
	[MountedOn] [varchar](200) NULL,
	[IPADD] [varchar](200) NULL,
	[HOST] [varchar](200) NULL
)

4、创建python脚本

vi disk_usage_to_sql.py


import socket
import os
import subprocess
import pyodbc

# 获取主机名
def get_hostname():
    return socket.gethostname()

# 获取 df -h 输出
def get_disk_usage():
    result = subprocess.run(['df', '-h'], stdout=subprocess.PIPE)
    return result.stdout.decode('utf-8')

# 解析 df -h 输出
def parse_disk_usage(output):
    lines = output.strip().split('\n')[1:]  # 跳过标题行
    data = []
    for line in lines:
        parts = line.split()
        if len(parts) >= 6:
            filesystem, size, used, available, use_percentage, mounted_on = parts
            if (filesystem != 'tmpfs') and (filesystem != 'devtmpfs'):   # 过滤tmpfs和devtmpfs
                data.append((filesystem, size, used, available, use_percentage, mounted_on))
    return data

# 将数据插入 SQL Server
def insert_into_sql_server(data):
    host = get_hostname()
    conn_str = (
        'DRIVER={ODBC Driver 17 for SQL Server};'
        'SERVER=192.168.2.25;'
        'DATABASE=dbname;'
        'UID=user;'
        'PWD=password;'
    )
    with pyodbc.connect(conn_str) as conn:
        cursor = conn.cursor()
        for row in data:
            cursor.execute(
                "INSERT INTO DiskUsage (Filesystem, Sizes, Used, Avail, UsePercent, MountedOn, IPADD, Host) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
                row + ('192.168.0.36', host,)  # 将主机名添加到每个数据行的末尾
            )
        conn.commit()

if __name__ == '__main__':
    disk_usage_output = get_disk_usage()
    parsed_data = parse_disk_usage(disk_usage_output)
    insert_into_sql_server(parsed_data)

5、创建计划任务

# 授予脚本执行权限
chmod +x disk_usage_to_sql.py

# 编辑 crontab 文件
crontab -e

# 添加 cron 作业,每1小时运行一次
0 * * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1
# 每1分钟运行一次
* * * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1
# 每天2点运行一次
0 2 * * * /usr/bin/python3 /opt/disk_usage_to_sql.py >> /opt/disk_usage_to_sql.log 2>&1

# 查看执行记录
tail -f /var/log/cron