很多時候需要進(jìn)行多進(jìn)程執(zhí)行腳本液样,比如需要循環(huán)執(zhí)行一年中每一天的數(shù)據(jù)铐达,下面的代碼是通過管道傳輸文件進(jìn)行進(jìn)程數(shù)的控制委粉。
- todo_all.sh 腳本內(nèi)容:
#!/bin/bash --login
#傳入的日期參數(shù),起始日期和結(jié)束日期
rundateStart=$1
rundateE=$2
rundate=`date -d "$rundateStart" +%s`
rundateEnd=`date -d "$rundateE" +%s`
trap "exec 1000>&-;exec 1000<&-;exit 0" 2
#設(shè)置管道傳輸文件娶桦,指定文件操作符
mkfifo testfifo
exec 1000<>testfifo
rm -fr testfifo
#for循環(huán)控制同時執(zhí)行進(jìn)程數(shù)
for ((n=1;n<=25;n++))
do
echo >&1000
done
start=`date "+%s"`
while [ "$rundate" -le "$rundateEnd" ]
do
read -u1000
{
run=$(date -d @$rundate +"%Y%m%d") #20170101
#一些日期格式化的方式
run_format=`date +%Y-%m-%d -d "$run"` #2017-01-01
next_day=`date +%Y%m%d -d "$run 1 days "` #20170102 一天之后
next_week=`date +%Y%m%d -d "$run 1 weeks "` #20170108 一周之后
next_month=`date +%Y%m%d -d "$run 1 months "` #20170201 一個月之后
last_week=`date +%Y%m%d -d "$run 1 weeks ago"` #20161225 一周前
echo $run $run_format $next_day $next_week $last_week
#你的業(yè)務(wù)邏輯
sleep 3
echo >&1000
}&
rundate=$((rundate+86400))
done
wait
end=`date "+%s"`
let return=$end-$start
echo "Time: $return"
exec 1000>&-
exec 1000<&-
- 腳本執(zhí)行:
[admin@DataNode122 tiku]$ ./todo_all.sh 20170901 20171001
20170918 2017-09-18 20170919 20170925 20170911
20170911 2017-09-11 20170912 20170918 20170904
20170908 2017-09-08 20170909 20170915 20170901
20170917 2017-09-17 20170918 20170924 20170910
20170904 2017-09-04 20170905 20170911 20170828
20170912 2017-09-12 20170913 20170919 20170905
20170914 2017-09-14 20170915 20170921 20170907
...以下省略....