2. 管道fifo

                   

    1.1

    實例1.1:將需要多進程執行的程序塊全部使用command & wait 轉移到后臺執行即可。

          用“{}”將主執行程序變為一個塊,用&放入后臺,四次執行全部放入后臺后,

          需要用一個wait指令,等待所有后臺進程執行結束,

          不然系統是不會等待的,直接繼續執行后續指令,直到整個程序結束。

    

     #!/bin/bash

     start=`date "%s"`

     for (( i=0; i<10; i ))

     do

         {

             echo "success!!!"

             sleep 3

         } &  #將上述程序塊放到后臺執行

     done

     wait    #等待上述程序結束

     end=`date "%s"`

     echo "time: " `expr $end – $start`

     

    

    2.1

    實例2.1:

    #!/bin/sh

    function a_sub {

        sleep 2;

        endtime=`date %s`

        sumtime=$[$endtime-$starttime]

        echo "我是whl,整個腳本已經執行了$sumtime秒"

    }

    

    starttime=`date %s`

    export starttime

    

    tmp_fifofile="/tmp/$$.fifo"               ##其中$$為該進程的pid

    

    mkfifo $tmp_fifofile                      ##創建命名管道

    

    exec 6<>$tmp_fifofile                     ##把文件描述符6和FIFO進行綁定

        

    rm -f $tmp_fifofile                       ##綁定后,該文件就可以刪除了

        

    thread=30                                 ##

進程并發數為30,用這個數字來控制一次提交的請求數

    

    for ((i=0;i<$thread;i ));

    do    

        echo >&6                              ##寫一個空行到管道里,因為管道文件的讀取以行為單位

    done

    

    

    while read dat

    do

          ##讀取管道中的一行,每次讀取后,管道都會少一行

        read -u6

        {        a_sub || {echo "a_sub is failed"}

                   echo $dat

                   echo >&6                     ##每次執行完a_sub函數后,再增加一個空行,這樣下面的進程才可以繼續執行

        } &

    done<data.txt

    

    wait                                     ##這里的wait意思是,需要等待以上所有操作(包括后臺的進程)都結束后,再往下執行。

       

    exec 6>&-                                ##關閉文件描述符6的寫

    exec 6<&-

         

         

         

     

     實例2:多線程備份數據庫

     

     #!/bin/bash

     hour=`date %H`

     day=`date %F`

     now=`date %F_%H`

     all_dbs="no"

     passwd="mysql_pass"

     sshpass="ssh_pass"

     dbs="db1 db2 db3 dbx dby dbz"

     

     cpu_num=`cat /proc/cpuinfo |grep processor|wc -l`

     p_fifo="/tmp/$$.pipo"

     mkfifo $p_fifo

     exec 111<>$p_fifo       #關聯文件描述符和管道

     rm -f $p_fifo

     trap "exec 111>&-;exec 111<&-;exit 0" 2    

     for ((i=1; i<=$cpu_num; i ))

     do

         echo >&111             #定義進程隊列大小,cpu核數

     done

     

     function backup()

     {

         if [ $all_dbs == "no" ];then

             for db in $dbs

             do

                 read -u111      #從隊列中獲取一個消息,隊列中消息數減一

                 {

                 dbname=`echo $db|sed "s/-/@002d/g"`

                 ops="–parallel=5 –compress-threads=5 –databases=$dbname"

                 bpath="/data1/ehr-Mysql-backup/${day}/${db}"

                 inbackup

                 sleep 10

                 echo >&111  #添加一個消息到隊列中,維持隊列中消息數不變(進程個數)

                 } &               #將代碼塊放后臺處理

             done

             wait                 #等待所有后臺進程處理完

             exec 111>&-          #關閉描述符,寫關閉

             exec 111<&-          #關閉描述符,讀關閉

         else

             ops="–parallel=5 –compress-threads=5"

             bpath="/data1/ehr-MYSQL-backup/${day}"

             inbackup

         fi

     }

     

     function inbackup()

     {

         if [ -f ${bpath}/lsn_${last}/xtrabackup_checkpoints ];then

             echo "incremental_basedir found,do a increment backup"

            
/usr/bin/innobackupex -u root -p${passwd} –no-timestamp ${ops}
–incremental –incremental_basedir=${bpath}/lsn_${last}/
–extra-lsndir=${bpath}/lsn_${now}/ ${bpath} –stream=xbstream |gzip
|sshpass -p "${sshpass}" ssh -p 18122 root@10.10.10.79 "cat – >
${bpath}/${now}.xbstram.gz"

         else

             echo "incremental_basedir not found,do a full backup"

            
/usr/bin/innobackupex -u root -p${passwd} –no-timestamp ${ops}
–extra-lsndir=${bpath}/lsn_${now}/ ${bpath} –stream=tar |gzip |sshpass
-p "${sshpass}" ssh -p 18122 root@10.10.10.79 "cat – >
${bpath}/${now}.tgz"

         fi

     

     }

     

     case $hour in

     22)

             last=`date %F -d -yesterday`

             find /data1/ehr-mysql-backup/ -name "${last}*" -type d -exec rm -r "{}" \\\\;

             day=`date %F -d 1days`

             backup

             ;;

     10)

             last=`date %F_%H -d -12hours`

             backup

             ;;

     14|18)

             last=`date %F_%H -d -4hours`

             backup

             ;;

     *)

             echo "not backup time"

             ;;

     esac

          

         

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » shell的多進程實現

登錄

找回密碼

注冊

主站蜘蛛池模板: 91亚洲精品一区二区三区| 一区二区三区放荡人妻| 日韩人妻无码一区二区三区99| 国产精品国产三级国产av剧情| 天天摸天天操免费播放小视频| 亚洲欧美在线一区中文字幕| 深夜av在线免费观看| 中文字幕一卡二卡三卡| 午夜福利国产精品小视频| 日韩av高清在线看片| 大肉大捧一进一出好爽视频mba | 亚洲中文字幕一区二区| 少妇人妻偷人偷人精品| 无码乱人伦一区二区亚洲一| 国产精品无遮挡在线观看| 影音先锋女人AA鲁色资源| 狠狠v日韩v欧美v| 国产精品区一区第一页| 午夜欧美精品久久久久久久 | 日本中文一区二区三区亚洲| 国产精品三级爽片免费看| 天天躁日日摸久久久精品| 久久夜色撩人国产综合av | 美女裸体黄网站18禁止免费下载 | 亚洲精品www久久久久久| 亚洲欧美成人一区二区在线电影| 亚洲综合无码明星蕉在线视频 | 天天躁日日躁狠狠躁中文字幕| 在线视频一区二区三区色| 99久久亚洲综合精品成人网| 香蕉久久久久久久av网站| 桃花岛亚洲成在人线AV| 黑人大荫道bbwbbb高潮潮喷| 国产一区二区亚洲一区二区三区| 免费国产一级特黄aa大片在线| 国产午夜亚洲精品福利| 亚洲高潮喷水无码AV电影| 亚洲综合中文字幕首页| 免费无码又爽又刺激高潮虎虎视频| 国产精品一区二区三区性色| 人妻少妇久久中文字幕一区二区|