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