Linux中Top命令写入计划性任务之后失效了?

2022-11-21 10:50:46 浏览数 (2)

问题场景:

写了一个检测服务器cpu的脚本,每三分钟检测一次,当cpu总使用率达到30%时候将进行触发后续功能;


问题描述

脚本写完之后,手动执行没问题,但是将脚本写入crontab之后查看日志并未起到作用;

原脚本如下:

代码语言:javascript复制
#!/bin/bash
source /etc/profile
now_cpu=`/usr/bin/top  -n 1 | grep Cpu | awk '{print $2}' | awk -F '.' '{print $1}'`
fazhi=30
now=`date`
echo "现在的cpu值为:$now_cpu"
echo $now_cpu >> /root/cpu.log
if [ $now_cpu -ge $fazhi ];
then
   echo "现在的cpu大于$fazhi%,触发清理慢sql脚本"
   /bin/sh /root/test.sh
   echo "清理成功记录$now" >> /root/cpu.log
else
   echo "现在的cpu小于$fazhi%"
   echo "不需要清理记录$now" >> /root/cpu.log
fi

通过cpu.log发现当计划性任务执行脚本的时候$now_cpu参数获取为空我就知道是这里的问题,网上一开始查看了一些资料,有的说添加环境变量,但是也没效果;


原因分析解决:

专门针对Top命令写入计划性任务之后失效我展开了搜索查询;

发现缺少参数-b、添加后问题解决

修改后脚本如下:

代码语言:javascript复制
#!/bin/bash
source /etc/profile
now_cpu=`/usr/bin/top -b -n 1 | grep Cpu | awk '{print $2}' | awk -F '.' '{print $1}'`
#temp=`w`
fazhi=30
now=`date`
echo "现在的cpu值为:$now_cpu"
echo $now_cpu >> /root/cpu.log
if [ $now_cpu -ge $fazhi ];
then
   echo "现在的cpu大于$fazhi%,触发清理慢sql脚本"
   /bin/sh /root/test.sh
   echo "清理成功记录$now" >> /root/cpu.log
else
   echo "现在的cpu小于$fazhi%"
   echo "不需要清理记录$now" >> /root/cpu.log
fi
参数详解:

top -b: ‘批量模式’,用来将输出重定向到指定文件,一般配合-n 指定输出几次统计信息

0 人点赞