收集系统资源使用情况

需求

某公司的 Linux 运维工程师,负责维护生产环境 CentOS7 服务器。

现需要对系统定义以下定时任务:

每小时更新一次mlocate数据库和mandb数据库

每分钟收集一次系统资源使用情况,收集的结果保存到/var/log/system_load.log。

收集的资源使用情况包括:

  • CPU 使用率
  • 内存 使用率
  • 存储 使用率
  • 系统中运行的进程,需包含进程号、父进程号、CPU、内存使用率属性,并根据CPU使用率降序排序

实现过程

  1. 新建脚本文件
bash 复制代码
#1. 新建脚本文件
[root@server ~]# vim /usr/local/bin/system_resource_collect.sh
  1. 脚本内容(整合所有收集逻辑,加执行权限)
bash 复制代码
#!/bin/bash
# 日志文件路径
LOG_FILE="/var/log/system_load.log"
# 追加时间戳
echo "=====$(date '+%Y-%m-%d %H:%M:%S')====" >> $LOG_FILE
# CPU使用率
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print "CPU Usage: " 100 - $1 " %"}' >> $LOG_FILE
# 内存使用率
free -m | awk 'NR==2{printf "Memory Usage: %.2f%%\n", $3*100/$2 }' >> $LOG_FILE
# 存储使用率(根目录)
df -h / | awk 'NR==2{printf "Storage Usage: %s\n", $5}' >> $LOG_FILE
# 进程信息(PID/PPID/%CPU/%MEM,按CPU降序)
echo "Process List (PID, PPID, %CPU, %MEM):" >> $LOG_FILE
ps -eo pid,ppid,%cpu,%mem,command --sort=-%cpu >> $LOG_FILE
# 空行分隔每次收集结果
echo "" >> $LOG_FILE
  1. 给脚本加执行权限
bash 复制代码
[root@server ~]# chmod +x /usr/local/bin/system_resource_collect.sh
  1. 配置crontab

    bash 复制代码
    [root@server ~]# crontab -e
    # 每小时更新mlocate和mandb数据库
    0 * * * * /usr/bin/updatedb && /usr/bin/mandb
    
    # 每分钟执行脚本,收集资源
    * * * * * /usr/local/bin/system_resource_collect.sh
    
    [root@server ~]# crontab -l
    # 每小时更新mlocate和mandb数据库
    0 * * * * /usr/bin/updatedb && /usr/bin/mandb
    
    # 每分钟执行脚本,收集资源
    * * * * * /usr/local/bin/system_resource_collect.sh

    或者在/etc/cron.d下增加文件1update、2minute,配置执行的脚本(系统级别的任务优先配置在cron.d目录下)

    每小时执行的脚本也可以直接配置在原有的0hourly文件中

    bash 复制代码
    [root@server cron.d]# cat 1update 
    # Run the upate jobs
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    #01 * * * * root run-parts /etc/cron.hourly
    0 * * * * root /usr/bin/updatedb && /usr/bin/mandb
    
    [root@server cron.d]# cat 2minute 
    # Run the minutely jobs
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    #01 * * * * root run-parts /etc/cron.hourly
    * * * * * root /usr/local/bin/system_resource_collect.sh
  2. 验证

    bash 复制代码
    # 重启服务
    [root@server ~]# systemctl restart crond 
    [root@server ~]# systemctl status crond 
    
    # 查看日志
    [root@server ~]# tail -f /var/log/system_load.log
      1202   1200  0.0  0.2
    ............
    
    =====2025-11-11 22:11:01====
    CPU Usage: 0 %
    Memory Usage: 12.14%
    Storage Usage: 4%
    Process List (PID, PPID, %CPU, %MEM):
       PID   PPID %CPU %MEM
         1      0  0.2  0.3
         2      0  0.0  0.0
         4      2  0.0  0.0
         5      2  0.0  0.0
         6      2  0.0  0.0
    ............
    
    #执行md5sum /dev/zero &,top查看cpu占用,同时查看日志
    
    [root@server ~]# tail -f /var/log/system_load.log
    =====2025-11-11 22:15:01====
    CPU Usage: 100 %
    Memory Usage: 12.55%
    Storage Usage: 4%
    Process List (PID, PPID, %CPU, %MEM):
       PID   PPID %CPU %MEM
      1346   1202 99.4  0.0
         1      0  0.1  0.3
      1348    930  0.1  0.5
         2      0  0.0  0.0
         4      2  0.0  0.0
         5      2  0.0  0.0
         6      2  0.0  0.0
         7      2  0.0  0.0
         8      2  0.0  0.0
         9      2  0.0  0.0
        10      2  0.0  0.0
        11      2  0.0  0.0

    脚本补充command后任务执行

bash 复制代码
=====2025-11-12 20:04:01====
CPU Usage: 6.2 %
Memory Usage: 6.92%
Storage Usage: 4%
Process List (PID, PPID, %CPU, %MEM, COMMAND):
   PID   PPID %CPU %MEM COMMAND
   673      1  0.1  0.2 /usr/bin/vmtoolsd
  9830      2  0.1  0.0 [kworker/0:1]
  9912    961  0.1  0.2 sshd: root@pts/2
     1      0  0.0  0.2 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
     2      0  0.0  0.0 [kthreadd]
     4      2  0.0  0.0 [kworker/0:0H]
     6      2  0.0  0.0 [ksoftirqd/0]
     7      2  0.0  0.0 [migration/0]
     8      2  0.0  0.0 [rcu_bh]
     9      2  0.0  0.0 [rcu_sched]
    10      2  0.0  0.0 [lru-add-drain]
    11      2  0.0  0.0 [watchdog/0]
    
相关推荐
Configure-Handler几秒前
linux-kernel-fault-codes
linux·运维·服务器
运维行者_5 分钟前
通过Applications Manager的TCP监控确保无缝网络连接
运维·服务器·网络·数据库·人工智能
xiaoye-duck15 分钟前
《Linux系统编程》Linux 进程间通信之 System V 共享内存:IPC 底层原理与实战
linux
一勺菠萝丶18 分钟前
Linux 服务器临时用户创建与删除教程
linux·运维·服务器
曲幽22 分钟前
你的FastAPI又在服务器上“跑不起来”了?来,今天咱把打包这件事彻底聊透
linux·windows·python·docker·fastapi·web·pyinstaller·nssm·services
2023自学中28 分钟前
imx6ull 开发板,RTMP 推流本地视频 到虚拟机
linux·音视频·嵌入式·开发板
YOLO数据集集合33 分钟前
YOLOv11+DeepSeek多技术融合电网缺陷巡检平台|绝缘子破损瓷瓶故障AI识别、前后端一体化电力运维管理系统落地开发
运维·人工智能·yolo
_可乐无糖38 分钟前
踩完坑之后的总结:Windows安装docker
运维·windows·docker·容器
驭渊的小故事1 小时前
网络初始1(2000字详细剖析网络的TCP/IP协议栈)
linux·服务器·网络
赛博云推-Twitter热门霸屏工具1 小时前
Twitter自动发推工具怎么选?从人工运营到自动化管理的实践分析
运维·自动化·twitter