每分钟获取一次系统的 CPU、内存和磁盘,输出到一个 Excel

要定时每分钟获取一次系统的 CPU、内存和磁盘使用情况,并将结果输出到一个 Excel 文件中,你需要做两件事:

  1. 定时执行任务:使用 cron 来每分钟执行一次脚本。

  2. 输出到 Excel 文件:通过 Python 脚本将输出结果保存到 .xlsx 文件中,利用 openpyxlpandas 等库来处理 Excel 文件。

解决方案:

步骤 1:编写 Shell 脚本获取系统信息

我们仍然使用一个 Shell 脚本来获取系统信息,但需要将输出结果格式化为 CSV 格式,这样可以方便地导入到 Excel 文件中。

bash#!/bin/bash
​
# 获取当前时间
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
# 获取 CPU 使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
# 获取内存使用情况
memory_usage=$(free -h | grep Mem | awk '{print \$3 "/" \$2}')
​
# 获取磁盘使用情况
disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print \$5}' | head -n 1)
​
# 输出 CSV 格式
echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> /path/to/system_usage.csv

解释:

  • 时间戳:我们使用 date 命令生成当前时间戳,格式为 YYYY-MM-DD HH:MM:SS

  • CPU 使用率:通过 top 命令来获取 CPU 使用率(从空闲率计算)。

  • 内存使用情况:通过 free -h 获取内存的已用和总量。

  • 磁盘使用情况:通过 df -h 获取磁盘使用率,并只选取根文件系统的使用率。

步骤 2:定时执行 Shell 脚本

使用 cron 来每分钟执行一次该脚本。

  1. 打开 crontab 文件:

    bashcrontab -e
  2. 添加以下行,设置每分钟运行脚本:

    bash* * * * * /path/to/system_usage.sh

这将会使脚本每分钟执行一次,并将每次的结果追加到 /path/to/system_usage.csv 文件中。

步骤 3:编写 Python 脚本将 CSV 转换为 Excel

接下来,我们编写一个 Python 脚本,将 CSV 文件的内容转换成 Excel 文件。我们使用 pandas 库来处理 CSV 数据,并将其保存为 .xlsx 文件。

  1. 安装必要的 Python 库

    如果你没有安装 pandasopenpyxl,可以通过以下命令安装:

    bashpip install pandas openpyxl
  2. Python 脚本内容

    pythonimport pandas as pd
    ​
    # CSV 文件路径
    csv_file = "/path/to/system_usage.csv"
    excel_file = "/path/to/system_usage.xlsx"
    ​
    # 读取 CSV 文件
    df = pd.read_csv(csv_file, names=["Timestamp", "CPU Usage (%)", "Memory Usage", "Disk Usage (%)"])
    ​
    # 将 DataFrame 写入 Excel 文件
    df.to_excel(excel_file, index=False, engine='openpyxl')
    ​
    print(f"数据已成功保存为 Excel 文件:{excel_file}")

步骤 4:定时将 CSV 转换为 Excel 文件

你可以将上面的 Python 脚本放入一个单独的文件(例如 csv_to_excel.py),并使用 cron 设置定时任务每分钟运行 Python 脚本。

  1. 编辑 crontab 文件:

    bashcrontab -e
  2. 添加一条新的 cron 任务,使其每分钟运行 Python 脚本:

    bash* * * * * /usr/bin/python3 /path/to/csv_to_excel.py

解释:

  • Shell 脚本:获取系统信息并每分钟将结果输出到 CSV 文件。

  • Python 脚本:定期将 CSV 文件转换为 Excel 文件,方便查看。

  • Cron 定时任务:确保每分钟执行一次上述任务。

完整流程:

  1. 每分钟system_usage.sh 脚本会执行,获取系统的 CPU、内存、磁盘使用情况,并将数据保存到 system_usage.csv 文件中。

  2. 每分钟csv_to_excel.py 脚本会读取 CSV 文件,将其转换为 Excel 格式,并保存为 system_usage.xlsx

  3. 结果保存后,你可以通过 Excel 查看每分钟的系统资源使用情况。

通过这种方式,你可以定期记录并保存服务器的性能数据。

#!/bin/bash
​
# 获取当前时间
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
# 获取 CPU 使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
# 获取内存使用情况
memory_usage=$(free -h | grep Mem | awk '{print \$3 "/" \$2}')
​
# 获取磁盘使用情况
disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print \$5}' | head -n 1)
​
# 输出 CSV 格式
echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> /path/to/system_usage.csv
​
​
​
#!/bin/bash
​
# 获取当前时间
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
# 获取 CPU 使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
# 获取内存使用情况
memory_usage=$(free -h | grep Mem | awk '{print \$3 "/" \$2}')
​
# 获取磁盘使用情况
disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print \$5}' | head -n 1)
​
# 输出 CSV 格式
echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> /path/to/system_usage.csv
​
​
​
#!/bin/bash
​
# 设置 CSV 文件的路径(Excel 可以打开该格式)
output_file="/path/to/system_usage.csv"
​
# 检查 CSV 文件是否存在,如果不存在则写入表头
if [ ! -f "$output_file" ]; then
    echo "Timestamp,CPU Usage (%),Memory Usage,Disk Usage" > "$output_file"
fi
​
# 无限循环,每 10 分钟获取一次系统信息
while true; do
    # 获取当前时间(时间戳)
    timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
    # 获取 CPU 使用情况
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
    # 获取内存使用情况
    memory_usage=$(free -h | grep Mem | awk '{print \$3 "/" \$2}')
​
    # 获取磁盘使用情况(根文件系统使用百分比)
    disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print \$5}' | head -n 1)
​
    # 输出数据到 CSV 文件
    echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> "$output_file"
​
    # 等待 10 分钟(600 秒)
    sleep 600
done
​
​
​
#!/bin/bash
​
# 设置 CSV 文件的路径(Excel 可以打开该格式)
output_file="/path/to/system_usage.csv"
​
# 检查 CSV 文件是否存在,如果不存在则写入表头
if [ ! -f "$output_file" ]; then
    echo "Timestamp,CPU Usage (%),Memory Usage,Disk Usage" > "$output_file"
fi
​
# 无限循环,每 10 分钟获取一次系统信息
while true; do
    # 获取当前时间(时间戳)
    timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
    # 获取 CPU 使用情况
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
​
    # 获取内存使用情况
    memory_usage=$(free -h | grep Mem | awk '{print $3 "/" $2}')
​
    # 获取磁盘使用情况(根文件系统使用百分比)
    disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5}' | head -n 1)
​
    # 输出数据到 CSV 文件
    echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> "$output_file"
​
    # 等待 10 分钟(600 秒)
    sleep 600
done
​
​
​
#!/bin/bash
​
# 获取 CPU 使用情况
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
# 获取内存使用情况
mem_total=$(free -h | grep Mem | awk '{print \$2}')
mem_used=$(free -h | grep Mem | awk '{print \$3}')
mem_free=$(free -h | grep Mem | awk '{print \$4}')
​
# 输出结果
echo "CPU Usage: $cpu_usage%"
echo "Total Memory: $mem_total"
echo "Used Memory: $mem_used"
echo "Free Memory: $mem_free"
​
​
​
​
#!/bin/bash
​
# 获取CPU使用情况
get_cpu_usage() {
    # 使用top命令获取CPU信息,并提取相关信息
    cpu_info=$(top -bn1 | grep "Cpu(s)" | \
        sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
        awk '{print 100 - $1"%"}')
    echo "CPU Usage: $cpu_info"
}
​
# 获取内存使用情况
get_memory_usage() {
    # 使用free命令获取内存信息,并提取相关信息
    mem_info=$(free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }')
    echo "$mem_info"
}
​
# 主函数
main() {
    echo "System Resource Usage:"
    get_cpu_usage
    get_memory_usage
}
​
# 执行主函数
main
​
​
​
​
#!/bin/bash
​
# 设置 CSV 文件的路径(Excel 可以打开该格式)
output_file="/path/to/system_usage.csv"
​
# 检查路径是否存在,如果不存在则创建
output_dir=$(dirname "$output_file")
if [ ! -d "$output_dir" ]; then
    echo "目录不存在,正在创建目录: $output_dir"
    mkdir -p "$output_dir"
fi
​
# 检查 CSV 文件是否存在,如果不存在则写入表头
if [ ! -f "$output_file" ]; then
    echo "Timestamp,CPU Usage (%),Memory Usage (Used/Total),Disk Usage (%)" > "$output_file"
fi
​
# 无限循环,每 10 分钟获取一次系统信息
while true; do
    # 获取当前时间(时间戳)
    timestamp=$(date "+%Y-%m-%d %H:%M:%S")
​
    # 获取 CPU 使用情况
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - \$1}')
​
    # 获取内存使用情况,格式化为 "Used/Total"
    memory_usage=$(free -h | grep Mem | awk '{print \$3 "/" \$2}')
​
    # 获取磁盘使用情况(根文件系统使用百分比),确保输出是数字格式(去除%符号)
    disk_usage=$(df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print \$5}' | head -n 1 | sed 's/%//')
​
    # 输出数据到 CSV 文件
    echo "$timestamp,$cpu_usage,$memory_usage,$disk_usage" >> "$output_file"
​
    # 等待 10 分钟(600 秒)
    sleep 600
done
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值