1. 需求
每隔5秒检查某个进程占用内存大小
2. 分析
- centos 最低只能到每隔一分钟,所以只能代码里sleep实现秒级了
- 如果固定一分钟调用一次shell,可能因为代码逻辑过于复杂,导致没有在一分钟内运行完,然后多次调用同一个shell导致异常,需要加锁
- 基于上一步分析,需要对sleep适当做平衡补偿
3. 上代码
#!/bin/sh
# author: scoful
# set -x # 开启就是详细debug模式
checkMemory(){
echo $(date +%F%n%T)
echo "====开始运行checkMemory脚本===="
。。。敏感内容省略一下。。。
}
loop(){
step=5 #间隔的秒数,不能大于60,然后定时设置一分钟调用一次,* * * * *
for ((z=0;z<60;z=(z+step)));do
checkMemory
temp=`expr $step - 1` # 因为上一步可能耗时不止1秒,适当减少进行平衡
sleep $temp
done
exit 0
}
#这一步就是锁了
[ "${FLOCKER}" != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0" "$@" ||
loop
echo "checkMemory shell the end"
echo $(date +%F%n%T)
再设置个定时任务
* * * * * root bash /home/scoful/checkMemory.sh >> /home/scoful/checkMemory.out 2>&1 &
搞定。
over,enjoy!!!