# !bin/bash
# 创建日志文件夹
log_file_dir="./log/${db_name}"
mkdir -p ${log_file_dir}
log_file_name="${log_file_dir}/${table_name}_${begin_date}_${end_date}_log.log"
# 最大进程数
PROCESS_NUM=${1}
# 使用mkfifo命令可以使用指定的名称创建先进先出文件(FIFO)
# 创建一个fifo文件
FIFO_FILE=/tmp/$.fifo
mkfifo $FIFO_FILE
# 关联fifo文件和fd6
exec 6<>$FIFO_FILE # 将fd6指向fifo类型
rm $FIFO_FILE
# 向fd6中输入$PROCESS_NUM个回车
for((idx=0;idx<${PROCESS_NUM};idx++))
do
echo
done >&6
for daily_date in ${date_list}
do
read -u6
# read -u6命令执行一次,相当于尝试从fd6中获取一行,如果获取不到,则阻塞
# 获取到了一行后,fd6就少了一行了,开始处理子进程,子进程放在后台执行
{
echo "${db_name}-${table_name}-${daily_date} begin at `date '+%Y%m%d-%H:%M:%S'`" >> ${log_file_name}
endless_loop=1
while [ ${endless_loop} -gt 0 ]
do
hour=`date +%k`
minute=`date +%M`
# 小时*100+分钟
hour_min=$(expr ${hour} \* 60 + ${minute})
echo ${hour_min}
#脚本可以运行的时间段 08:00-14:00,16:00-19:30
#8:00 8*60=480
#14:00 14*60=840
#16:00 16*60=960
#19:30 19*60+30=1170
if [ ${hour_min} -gt 480 ] && [ ${hour_min} -lt 840 ] || [ ${hour_min} -gt 960 ] && [ ${hour_min} -lt 1170 ]
then
endless_loop=0
else
echo "${db_name}-${table_name}-${daily_date}-sleep"
sleep 60s
fi
done
# 运行脚本
time_now=`date '+%Y%m%d-%H-%M-%S'`
echo "sh data_pipeline_v3.sh ${db_name} ${table_name} ${daily_date} at `date '+%Y%m%d-%H:%M:%S'`" >> ${log_file_name}
sh ./data_pipeline_v3.sh ${db_name} ${table_name} ${daily_date}
echo "${db_name}-${table_name}-${daily_date} end at `date '+%Y%m%d-%H:%M:%S'`" >> ${log_file_name}
echo "" >> ${log_file_name}
# 完成后再补充一个回车到fd6中,释放一个锁
echo >&6 # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
} &
echo "日期循环结束!"
done
# 关闭fd6
exec 6>&-
09-17
4903