Openwrt_Linux_crontab任务_顺序执行脚本


Openwrt_Linux_crontab任务_顺序执行脚本

转载注明来源: 本文链接 来自osnosn的博客,写于 2020-12-21.

Linux (openwrt,debian,centos...) 中 crontab 的任务太多,不想挤在一起同时执行

  • 可以考虑放到一个shell脚本中顺序执行。这样,机器的负荷就不会在那些特定的时间点暴增。
    crontab 中 只需要加入一行*/5 * * * * /path.../runTaskInSequence.sh,每5分钟执行一次即可。
  • 以下脚本用 sh, dash, bash 都行
#!/bin/sh
# filename: runTaskInSequence.sh

# current dir
MYTK=$(dirname $(readlink -f -- $0))
cd $MYTK

MIN="$(date '+%M')"     #min
MIN="${MIN#0}"          #去掉首位的0
MIN2="$(($MIN/10))"     # 取十位
#MIN1="$(($MIN%10))"     # 取个位
#HOUR="$(date '+%H')"    #hour
#HOUR="${HOUR#0}"        #去掉首位的0

## run every hour
if [ "$MIN" -eq 10 ]; then
   ./mytask11.sh
   ./mytask12.sh
fi

## run every half hour
if [ "$MIN" -eq 10 -o "$MIN" -eq 40 ]; then
   ./mytask21.sh
   ./mytask22.sh
fi

## run */10 min
if [ "$MIN1" -eq 0 ]; then
   ./mytask31.sh
   ./mytask32.sh
fi

## run */5 min
./mytask01.sh
  • 如果你的shell不支持 "%" 运算, 可以用下面这个, 调用外部命令 expr 来计算
#!/bin/bash

#当前目录
MYTK=$(/usr/bin/dirname $(/bin/readlink -f -- $0))
cd $MYTK

MIN="$(date '+%M')"       # 获取当前分钟数
MIN="${MIN#0}"            #去掉首位的0
MIN2="$(expr $MIN / 10)"  #min/10
#MIN1="$(expr $MIN % 10)"  #min%10
#HOUR="$(date '+%H')"      # 获取当前小时数
#HOUR="${HOUR#0}"          #去掉首位的0
...

---end---


转载注明来源: 本文链接 来自osnosn的博客.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM