需求
某公司的 Linux 运维工程师,负责维护生产环境 CentOS7 服务器。
现需要对系统定义以下定时任务:
每小时更新一次mlocate数据库和mandb数据库
每分钟收集一次系统资源使用情况,收集的结果保存到/var/log/system_load.log。
收集的资源使用情况包括:
- CPU 使用率
- 内存 使用率
- 存储 使用率
- 系统中运行的进程,需包含进程号、父进程号、CPU、内存使用率属性,并根据CPU使用率降序排序
实现过程
- 新建脚本文件
bash
#1. 新建脚本文件
[root@server ~]# vim /usr/local/bin/system_resource_collect.sh
- 脚本内容(整合所有收集逻辑,加执行权限)
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
- 给脚本加执行权限
bash
[root@server ~]# chmod +x /usr/local/bin/system_resource_collect.sh
-
配置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 -
验证
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]