问题场景:
写了一个检测服务器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 指定输出几次统计信息