解决:centos秒级定时

本文介绍了一个Shell脚本,用于每隔5秒检查进程的内存使用情况。由于CentOS的限制,采用代码内部睡眠实现秒级检查,并通过加锁避免频繁调用同一脚本导致的问题。脚本中包含了一个循环结构,通过平衡补偿来确保定时任务的准确性。同时,设置了定时任务以确保脚本的持续运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值