!/bin/bash
a=
cat /data*/es/logs/es*/es.log|grep uniqueOLD_IFS=”$IFS” IFS=”/“ arr=($a) IFS=”$OLD_IFS”thread_num=40 tmp_file=”/tmp/$$.fifo”
trap “exec 6>&-;exec 6<&-;exit 0” 2 #脚本运行过程中,如果接收到信号2(Ctrl+C)中断命令,则关闭文件描述符6的读写,并正常退出
mkfifo ${tmp_file} exec 6<>${tmp_file}
rm -rf ${tmp_file}
for ((i=1;i<=${thread_num};i++))do echo >&6 done
start_time=
date +%sn=0 for s in ${arr[@]} do if [[ $s =~ “])” ]];then b=”$s” OLD_IFS=”$IFS” IFS=”]” barr=($b) IFS=”$OLD_IFS” for uid in ${barr[@]} do if [[ $uid =~ “)” ]];then nohup echo “———-“ >>/dev/null 2>&1 & else ((n++)) read -u6 #从管道中读取行,每次读一行。每读一次就会减少一个空行,直到管道中没有回车符,所有行读取完毕后执行挂起,实现线程数量控制。 { nohup echo “${n}: $uid” >> ./delete_uid.log 2>&1 & nohup sh /opt/work/search/es/bin/run.sh cmd “for((i=0;i<10;i++));do rm -rf /data*/es/nodes/0/indices/$uid; done” >> ./delete_uid.log 2>&1 & sleep 3 echo >&6 #任务在后台执行结束后,向文件描述符中写入一个空行。如果不在向描述符中写入空行,当后台放入THREAD_NUM个任务之后,由于描述符中没有可读取的空行,会导致read -u6停顿 }& fi done fi done wait
stop_time=
date +%sexec 6>&- # 关闭文件描述符的写 exec 6<&- # 关闭文件描述符的读
