shell 多进程并发(执行)脚本(fifo fd6)

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值