PDO批量並發執行SSH工具介紹

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

批量並發執行工具PDO,主要是解決批量執行的繁鎖,更安全便捷的操作工具.
本身是解決公司內部的一些問題,並且有很多特定環境的一些使用,現在抽離出其中都可以使用的部分.

  • 工具名稱: pdo(parallel do something) https://github.com/ohlinux/pdo

安裝

依賴

  1. 需要有一個中控機與被管理機器建立了無密碼的密鑰關係.
  2. 需要有go語言的環境,進行編譯安裝.這裡沒有提供bin檔案.
  3. 自己所測試的環境有,centos macos.

編譯

先擷取依賴的第三方庫:

go get github.com/cihub/seeloggo get github.com/robfig/config

安裝go 環境.

go build pdo.go

設定檔目錄,預設在~/.pdo.如果不在此處指定.

pdo 結構

pdo 處理對象來源

擷取機器列表和相對應的路徑有三種途徑.(這裡去掉了資料庫這種特定的)

  1. -f 檔案,host的列表檔案,可以是一列,也可以是兩列有相關的目錄依賴.後面有例子.
  2. -a app名字;-p 產品名;-a支援多app採用 app1,app2逗號分隔. (這個是資料庫的來源,因為是特定環境的所以不再有)
  3. 標準輸入 cat 1.host | pdo
  4. -R當使用的時候,可以自動產生失敗的列表.詳細查看例子"Retry功能"

pdo 列表過濾

如果列表名稱是這樣的結構,xxx.yyy 那麼過濾的就是yyy,如果沒有這個需要,可以忽略.

  1. -i yf01,dbl01,cq02 過濾物理機房名稱,多個可用逗號隔開.
  2. -I JX/TC 過濾邏輯機房,配置在-c configure file 中

設定檔中:

    [IDC]    JX:yf01,cq01,dbl01,ai01    TC:cq02,tc,m1,db01

日誌記錄

日誌主要記錄使用者,使用過的命令,保證多人操作的時候可以查看到.

日誌設定檔查看github.com/cihub/seelog
主設定檔格式查看github.com/robfig/config

pdo 功能

會有主機和命令和單台執行確認.

  • -r 數字 ,並發量,預設為1
  • -C configure , 設定檔,預設為~/.pdo/pdo.conf
  • -o dir , 輸出目錄,預設為空白,會列印在螢幕,如果添加則只會列印到檔案中.
  • -cmd 命令, 命令縮寫,在設定檔中.
  • -t 逾時結束,逾時時間預設5min鐘.
  • -y 不用輸入確認.
  • -c copy file/dir ,複製檔案/或者目錄,要求無端的目錄必需存在.
  • -e script 執行指令碼.
  • -T 執行間隔時間,預設為0,比命令中加sleep效果好.
  • -R retry ,失敗之後retry功能,會記錄上次失敗的列表和ctrl+c未執行的列表.
  • -temp template模板名字,在配置中.
  • -b build-in 在使用template的模板時候可以嵌入指令碼.
  • -V 查看version
  • -show 查看顯示方式"row" 行顯示方式.
  • -match 在行顯示的時候可以進行match字串.高亮紅色顯示.
  • -rule 在行顯示的模式下,可以使用conf中的rule,來定義不同match的字串的動作.(暫時無)

pdo 未完成功能

  • 去重與多執行個體,產品線重啟並發最佳化.
  • web頁面展示功能.

注意事項

  • 操作的命令,被引號括起來的,一定要保持在命令最後.

pdo使用用舉例

設定檔

 [PDO] logconf:/home/work/.pdo/log.xml [IDC] JX:yf01,cq01,dbl01,ai01,jx,cp01 TC:cq02,tc,m1,db01,st01 [TEMPLATE] container : /home/work/.pdo/template/container.sh startbykill : /home/work/.pdo/template/startbykill.sh [CMD] restart: bash bin/xxxControl.sh N%%N%%N%%restart findLog: find xxx00* -name "debug" -type d findCount: ls log | wc -l

host列表檔案

第一列一定是host,hostname或者ip都可以,第二列可選是命令工作的路徑.

cat godir/1.listyf-xxx-app01.yf01 /home/work/xxx001yf-xxx-app02.yf01 /home/work/xxx004yf-xxx-app03.yf01 /home/work/xxx002

使用管道方式

cat 1.list | pdo -r 2 "pwd">>>> Welcome ajian...yf-xxx-pre01.vm          -/home/work/xxx001    yf-xxx-app01.yf01        -/home/work/xxx001yf-xxx-app02.yf01        -/home/work/xxx001    yf-xxx-app03.yf01        -/home/work/xxx001yf-xxx-app04.yf01        -/home/work/xxx001    1-xxx-app17.m1           -/home/work/xxx001m1-xxx-app25.m1          -/home/work/xxx001    m1-xxx-app0220.m1        -/home/work/xxx001m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003ai-xxx-app01.ai01        -/home/work/xxx004    db-xxx-app17.db01        -/home/work/xxx003db-xxx-app63.db01        -/home/work/xxx001#--Total--#  13#---CMD---#  pwd//每一次確認Continue (y/n):ygo on ...[1/13] yf-xxx-app01.yf01  [SUCCESS]./home/work/xxx001Continue (y/n):[1/13] yf-xxx-pre01.vm  [SUCCESS]./home/work/xxx001//單台執行完 第二次確認Continue (y/n)://後面就是按2並發執行.

使用簡寫命令

這個主要是解決一些重複執行的繁鎖的單行命令.看下面的一個重啟命令很是麻煩,但通過轉換之後就輸入很方便了.

-cmd為縮寫命令= bash bin/xxxControl.sh N%%N%%N%%restart

$ pdo -f 1.list  -cmd restart>>>> Welcome ajian...yf-xxx-app01.yf01        -/home/work/xxx001    yf-xxx-app02.yf01        -/home/work/xxx001yf-xxx-app03.yf01        -/home/work/xxx001    yf-xxx-app04.yf01        -/home/work/xxx001yf-xxx-app00.yf01        -/home/work/xxx001    yf-xxx-app0148.yf01      -/home/work/xxx004dbl-xxx-app0109.dbl01    -/home/work/xxx003    m1-xxx-app17.m1          -/home/work/xxx001m1-xxx-app25.m1          -/home/work/xxx001    m1-xxx-app0220.m1        -/home/work/xxx001m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003cq01-xxx-app0179.cq01    -/home/work/xxx001    cq01-xxx-app0131.cq01    -/home/work/xxx005st01-xxx-app03.st01      -/home/work/xxx001    st01-xxx-app04.st01      -/home/work/xxx001st01-xxx-app02.st01      -/home/work/xxx001    st01-xxx-app00.st01      -/home/work/xxx001st01-xxx-app05.st01      -/home/work/xxx001    cq02-xxx-app0258.cq02    -/home/work/xxx001cq02-xxx-app0287.cq02    -/home/work/xxx001    jx-xxx-app17.jx          -/home/work/xxx001ai-xxx-app10.ai01        -/home/work/xxx001    db-xxx-app17.db01        -/home/work/xxx003#--Total--#  24#---CMD---#  bash bin/xxxControl.sh N%%N%%N%%restartContinue (y/n):

-o輸入與螢幕輸出

使用帶-o 指定輸出目錄,將不會再列印在螢幕上,主要是對grep日誌這種需求使用.速度要比螢幕列印快很多,是即時寫入.

$ cat 1.list | pdo -o xxxout "pwd">>>> Welcome ajian...yf-xxx-app01.yf01        -/home/work/xxx001    yf-xxx-app02.yf01        -/home/work/xxx001yf-xxx-app03.yf01        -/home/work/xxx001    yf-xxx-app04.yf01        -/home/work/xxx001yf-xxx-app00.yf01        -/home/work/xxx001    yf-xxx-app0148.yf01      -/home/work/xxx004dbl-xxx-app0109.dbl01    -/home/work/xxx003    m1-xxx-app17.m1          -/home/work/xxx001m1-xxx-app25.m1          -/home/work/xxx001    m1-xxx-app0220.m1        -/home/work/xxx001m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003cq01-xxx-app0179.cq01    -/home/work/xxx001    cq01-xxx-app0131.cq01    -/home/work/xxx005st01-xxx-app03.st01      -/home/work/xxx001    st01-xxx-app04.st01      -/home/work/xxx001st01-xxx-app02.st01      -/home/work/xxx001    st01-xxx-app00.st01      -/home/work/xxx001st01-xxx-app05.st01      -/home/work/xxx001    cq02-xxx-app0258.cq02    -/home/work/xxx001cq02-xxx-app0287.cq02    -/home/work/xxx001    cq02-xxx-app0212.cq02    -/home/work/xxx001jx-xxx-app17.jx          -/home/work/xxx001    ai-xxx-app10.ai01        -/home/work/xxx001db-xxx-app17.db01        -/home/work/xxx003#--Total--#  25#---CMD---#  pwdContinue (y/n):ygo on ...[1/25] yf-xxx-app01.yf01  [SUCCESS].Continue (y/n):ygo on ...[2/25] yf-xxx-app02.yf01  [SUCCESS].[3/25] yf-xxx-app03.yf01  [SUCCESS].[4/25] yf-xxx-app04.yf01  [SUCCESS].[5/25] yf-xxx-app00.yf01  [SUCCESS].[6/25] yf-xxx-app0148.yf01  [SUCCESS].[7/25] dbl-xxx-app0109.dbl01  [SUCCESS].[8/25] m1-xxx-app17.m1  [SUCCESS].[9/25] m1-xxx-app25.m1  [SUCCESS].[10/25] m1-xxx-app0220.m1  [SUCCESS].[11/25] m1-xxx-app0154.m1  [SUCCESS].[12/25] cq01-xxx-app0242.cq01  [SUCCESS].[13/25] cq01-xxx-app0179.cq01  [SUCCESS].[14/25] cq01-xxx-app0131.cq01  [SUCCESS].[15/25] st01-xxx-app03.st01  [SUCCESS].[16/25] st01-xxx-app04.st01  [SUCCESS].[17/25] st01-xxx-app02.st01  [SUCCESS].[18/25] st01-xxx-app00.st01  [SUCCESS].[19/25] st01-xxx-app05.st01  [SUCCESS].[20/25] cq02-xxx-app0258.cq02  [SUCCESS].[21/25] cq02-xxx-app0287.cq02  [SUCCESS].[22/25] cq02-xxx-app0212.cq02  [SUCCESS].[23/25] jx-xxx-app17.jx  [SUCCESS].[24/25] ai-xxx-app10.ai01  [SUCCESS].[25/25] db-xxx-app17.db01  [SUCCESS].

逾時killed進程

時間都帶單位,如1秒 1s , 1分鐘 1m , 1小時 1h .

這裡的1.log是一個大檔案.

$ pdo -f 1.list -t 1s -o out/ -r 3 "cat 1.log">>>> Welcome ajian...yf-xxx-app01.yf01        -/home/work/xxx001    yf-xxx-app02.yf01        -/home/work/xxx001yf-xxx-app03.yf01        -/home/work/xxx001    yf-xxx-app04.yf01        -/home/work/xxx001yf-xxx-app00.yf01        -/home/work/xxx001    yf-xxx-app0148.yf01      -/home/work/xxx004dbl-xxx-app0109.dbl01    -/home/work/xxx003    m1-xxx-app17.m1          -/home/work/xxx001m1-xxx-app25.m1          -/home/work/xxx001    m1-xxx-app0220.m1        -/home/work/xxx001m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003cq01-xxx-app0179.cq01    -/home/work/xxx001    cq01-xxx-app0131.cq01    -/home/work/xxx005st01-xxx-app03.st01      -/home/work/xxx001    st01-xxx-app04.st01      -/home/work/xxx001st01-xxx-app02.st01      -/home/work/xxx001    st01-xxx-app00.st01      -/home/work/xxx001st01-xxx-app05.st01      -/home/work/xxx001    cq02-xxx-app0258.cq02    -/home/work/xxx001cq02-xxx-app0287.cq02    -/home/work/xxx001    cq02-xxx-app0211.cq02    -/home/work/xxx001cq02-xxx-app0212.cq02    -/home/work/xxx001    jx-xxx-app17.jx          -/home/work/xxx001ai-xxx-app10.ai01        -/home/work/xxx001    db-xxx-app17.db01        -/home/work/xxx003#--Total--#  26#---CMD---#  cat log/ral-zoo.logContinue (y/n):ygo on ...[1/26] yf-xxx-app01.yf01  [Time Over KILLED].Continue (y/n):ygo on ...[2/26] yf-xxx-app04.yf01  [Time Over KILLED].[3/26] yf-xxx-app03.yf01  [Time Over KILLED].[4/26] yf-xxx-app02.yf01  [Time Over KILLED].[5/26] yf-xxx-app0148.yf01  [SUCCESS].[6/26] dbl-xxx-app0109.dbl01  [SUCCESS].[7/26] yf-xxx-app00.yf01  [Time Over KILLED].[8/26] m1-xxx-app0220.m1  [SUCCESS].[9/26] m1-xxx-app25.m1  [Time Over KILLED].[10/26] m1-xxx-app17.m1  [Time Over KILLED].[11/26] m1-xxx-app0154.m1  [SUCCESS].[12/26] cq01-xxx-app0242.cq01  [SUCCESS].[13/26] cq01-xxx-app0179.cq01  [Time Over KILLED].[14/26] cq01-xxx-app0131.cq01  [SUCCESS].[15/26] st01-xxx-app03.st01  [Time Over KILLED].[16/26] st01-xxx-app04.st01  [Time Over KILLED].[17/26] st01-xxx-app02.st01  [Time Over KILLED].[18/26] st01-xxx-app00.st01  [Time Over KILLED].[19/26] st01-xxx-app05.st01  [Time Over KILLED].[20/26] cq02-xxx-app0211.cq02  [SUCCESS].[21/26] cq02-xxx-app0258.cq02  [SUCCESS].[22/26] cq02-xxx-app0287.cq02  [SUCCESS].[23/26] ai-xxx-app10.ai01  [SUCCESS].[24/26] cq02-xxx-app0212.cq02  [SUCCESS].[25/26] jx-xxx-app17.jx  [Time Over KILLED].[26/26] db-xxx-app17.db01  [SUCCESS].

-c copy檔案

copy檔案其實是可以copy目錄的,只要遠端的目錄是存在的就不會報錯.

$ cat 1.host  | pdo -c get.sh /tmp/>>>> Welcome ajian...yf-xxx-upload05.yf01     -/home/work           yf-xxx-upload01.yf01     -/home/workyf-xxx-upload02.yf01     -/home/work#--Total--#  3#---CMD---#  get.sh --> /tmp/Continue (y/n):ygo on ...[1/3] yf-xxx-upload05.yf01  [SUCCESS].Continue (y/n):ygo on ...[2/3] yf-xxx-upload01.yf01  [SUCCESS].[3/3] yf-xxx-upload02.yf01  [SUCCESS].//檢查下檔案$ cat 1.host | pdo "ls /tmp/get.sh">>>> Welcome ajian...yf-xxx-upload05.yf01     -/home/work           yf-xxx-upload01.yf01     -/home/workyf-xxx-upload02.yf01     -/home/work#--Total--#  3#---CMD---#  ls /tmp/get.shContinue (y/n):ygo on ...[1/3] yf-xxx-upload05.yf01  [SUCCESS]./tmp/get.shContinue (y/n):ygo on ...[2/3] yf-xxx-upload01.yf01  [SUCCESS]./tmp/get.sh[3/3] yf-xxx-upload02.yf01  [SUCCESS]./tmp/get.sh

Retry功能

-R 就是相當於第四種列表來源,當執行錯誤,或者ctrl+c的時候就可以使用上,避免列表反覆執行某些命令.

這次多加兩台伺服器,有兩台是沒有這個上面指令檔的.所以新加的伺服器會報錯.

$ cat 2.list | pdo "ls /tmp/get.sh">>>> Welcome ajian...yf-xxx-upload05.yf01     -/home/work           yf-xxx-upload01.yf01     -/home/workyf-xxx-upload02.yf01     -/home/work           yf-xxx-upload03.yf01     -/home/workyf-xxx-upload04.yf01     -/home/work#--Total--#  5#---CMD---#  ls /tmp/get.shContinue (y/n):ygo on ...[1/5] yf-xxx-upload05.yf01  [SUCCESS]./tmp/get.shContinue (y/n):ygo on ...[2/5] yf-xxx-upload01.yf01  [SUCCESS]./tmp/get.sh[3/5] yf-xxx-upload02.yf01  [SUCCESS]./tmp/get.sh[4/5] yf-xxx-upload03.yf01  [FAILED].ls: /tmp/get.sh: No such file or directory[5/5] yf-xxx-upload04.yf01  [FAILED].ls: /tmp/get.sh: No such file or directory//使用-R 就可以直接拿到上一次執行失敗的列表.$pdo -R "ls /tmp/get.sh">>>> Welcome ajian...yf-xxx-upload03.yf01     -/home/work           yf-xxx-upload04.yf01     -/home/work#--Total--#  2#---CMD---#  ls /tmp/get.shContinue (y/n):ygo on ...[1/2] yf-xxx-upload03.yf01  [FAILED].ls: /tmp/get.sh: No such file or directory//如果是使用的ctrl+C中斷了列表,-R會記錄未執行完(包括已經執行但失敗的列表)$ cat 1.host | pdo  -T 10s "ls /tmp/get.sh">>>> Welcome ajian...yf-xxx-upload05.yf01     -/home/work           yf-xxx-upload01.yf01     -/home/workyf-xxx-upload02.yf01     -/home/work           yf-xxx-upload03.yf01     -/home/workyf-xxx-upload04.yf01     -/home/work#--Total--#  5#---CMD---#  ls /tmp/get.shContinue (y/n):ygo on ...[1/5] yf-xxx-upload05.yf01  [SUCCESS]./tmp/get.shContinue (y/n):ygo on ...[2/5] yf-xxx-upload01.yf01  [SUCCESS]./tmp/get.sh^C$ pdo -R "ls /tmp/get.sh">>>> Welcome ajian...yf-xxx-upload02.yf01     -/home/work           yf-xxx-upload03.yf01     -/home/workyf-xxx-upload04.yf01     -/home/work#--Total--#  3#---CMD---#  ls /tmp/get.shContinue (y/n):ygo on ...[1/3] yf-xxx-upload02.yf01  [SUCCESS]./tmp/get.shContinue (y/n):

### -e指令碼執行功能

$ cat t.sh#!/bin/bashcd /tmp/ && pwdecho "test"touch /tmp/t.log$ cat 1.host | pdo -e t.sh>>>> Welcome ajian...yf-xxx-upload05.yf01     -/home/work           yf-xxx-upload01.yf01     -/home/workyf-xxx-upload02.yf01     -/home/work#--Total--#  3#---CMD---#  Script: t.shContinue (y/n):ygo on ...[1/3] yf-xxx-upload05.yf01  [SUCCESS]./tmptest

模板功能

模板功能主要是解決重複的指令碼修改動作,可以固化成一些模板,直接使用.

  • 配置中可以自己添加模板

    $ cat ~/.pdo/pdo.conf[TEMPLATE]container : /home/work/.pdo/template/container.sh
  • 模板內容,這個模版主要是在一台伺服器上的xxxxxx目錄裡面進行操作. {{.CMD}} 就是會被替換的位置.

    $ cat /home/work/.pdo/template/container.sh#!/bin/bashgrep -l "^appName:" /home/work/xxx[0-9][0-9][0-9]/xxx.conf | while read file  ; doeval $(awk '{if($1 ~ /xxxPath/){printf "apppath=%s\n",$2};if($1 ~ /appName/){printf "appName=%s",$2}}' $file)echo $appNameif [  -d "$apppath" ];then        cd $apppath            {{.CMD}}fidone
  • 使用嵌入命令

        $ pdo -a xxxtest -temp container "pwd"    >>>> Welcome ajian...    yf-xxx-app02.yf01        -/home/work/xxx001    yf-xxx-app03.yf01        -/home/work/xxx001    yf-xxx-app00.yf01        -/home/work/xxx001    yf-xxx-app0148.yf01      -/home/work/xxx004    dbl-xxx-app0109.dbl01    -/home/work/xxx003    m1-xxx-app0220.m1        -/home/work/xxx001    m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003    cq01-xxx-app0179.cq01    -/home/work/xxx001    cq02-xxx-app0258.cq02    -/home/work/xxx001    cq02-xxx-app0287.cq02    -/home/work/xxx001    cq02-xxx-app0211.cq02    -/home/work/xxx001    jx-xxx-app17.jx          -/home/work/xxx001    db-xxx-app17.db01        -/home/work/xxx003    #--Total--#  14    #---CMD---#  pwd    Continue (y/n):y    go on ...    [1/14] yf-xxx-app02.yf01  [SUCCESS].    xxxtest    /home/work/xxx001    jingyan    /home/work/xxx002    pc_anti    /home/work/xxx003    bakan    /home/work/xxx004    smallapp    /home/work/xxx006    appui    /home/work/xxx008    Continue (y/n):n    exit ...
  • 還可以嵌入指令碼

    //指令碼內容$ cat 1.shecho "1.sh"pwd//嵌入指令碼使用-b$ pdo -a xxxtest -temp container -b 1.sh>>>> Welcome ajian...yf-xxx-app02.yf01        -/home/work/xxx001    yf-xxx-app03.yf01        -/home/work/xxx001yf-xxx-app00.yf01        -/home/work/xxx001    yf-xxx-app0148.yf01      -/home/work/xxx004dbl-xxx-app0109.dbl01    -/home/work/xxx003    m1-xxx-app0220.m1        -/home/work/xxx001m1-xxx-app0154.m1        -/home/work/xxx004    cq01-xxx-app0242.cq01    -/home/work/xxx003cq01-xxx-app0179.cq01    -/home/work/xxx001    cq02-xxx-app0258.cq02    -/home/work/xxx001cq02-xxx-app0287.cq02    -/home/work/xxx001    cq02-xxx-app0211.cq02    -/home/work/xxx001jx-xxx-app17.jx          -/home/work/xxx001    db-xxx-app17.db01        -/home/work/xxx003#--Total--#  14#---CMD---#Continue (y/n):ygo on ...[1/14] yf-xxx-app02.yf01  [SUCCESS].xxxtest1.sh/home/work/xxx001jingyan1.sh/home/work/xxx002pc_anti1.sh/home/work/xxx003bakan1.sh/home/work/xxx004smallapp1.sh/home/work/xxx006appui1.sh/home/work/xxx008

行顯示與匹配

這個功能有兩種使用情境:

  1. 有點類似multi tail 可以實現同時tail多個日誌,顯示在一個螢幕內,而且可以對match的字串進行高亮顯示.
  2. 如果輸出是單行輸出,沒有狀態顯示會顯示得加的美觀和可參考性.

所以這種顯示方式取決於時間的先後順序,交錯輸出.

拿redis的遷移過程為例子:

redis遷移至少有原來的一主一從,新主和新從.在遷移的過程中需要同時觀察四台伺服器的變化.如果是每次ssh四台伺服器tail 日誌是很麻煩而且容易出錯.

現在使用pdo命令:

    //操作的主機列表1.list    tc-yyy-redis40.tc /home/yyy/redis-shard3   //old master    cq02-yyy-redis80.cq02 /home/yyy/redis-shard3 //new master    yf-yyy-redis40.yf01 /home/yyy/redis-shard3 //old slave    jx-yyy-redis80.jx /home/yyy/redis-shard3  //new slave    第一步操作:  yf-yyy-redis40.yf01為主 --> cq02-yyy-redis80.cq02    #命令    #cat 1.list | pdo -r 5 -y -show row  -match "success" "tail -f log/redis.log"    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:56:51 * Slave ask for new-synchronization  //被要求同步    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 13:56:58 * (non critical): Master does not understand REPLCONF listening-port: Reading from master: Connection timed out    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:56:58 * Slave ask for synchronization    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:56:58 * Starting BGSAVE for SYNC    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:56:58 * Background saving started by pid 22855    > yf-yyy-redis40.yf01      >> [22855] 06 Jan 13:58:31 * DB saved on disk   //dump到磁碟    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:58:31 * Background saving terminated with success    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 13:58:31 * MASTER <-> SLAVE sync: receiving 1868940396 bytes from master  //從接收到主的檔案    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 13:58:47 * MASTER <-> SLAVE sync: Loading DB in memory //將已接收的檔案載入到記憶體    > yf-yyy-redis40.yf01      >> [11523] 06 Jan 13:58:47 * Synchronization with slave succeeded  //檔案同步成功    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 14:01:21 # Update masterstarttime[1382324097] after loading db    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 14:01:21 * AA: see masterstarttime: ip[10.36.114.56], port[9973], timestamp[1382324097]    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 14:01:21 * Write aof_global_offset[92961804447] to new aof_file[46] success    > cq02-yyy-redis80.cq02    >> [14752] 06 Jan 14:01:21 * MASTER <-> SLAVE sync: Finished with success //slave完成主從同步,說明第一步已經結束.

說明:

  1. 因為是tail -f 是不會主動退出命令,所以需要使用-y 和使用-r 來增加並發量,不然會先進行單台顯示 ,而不會顯示後面的.
  2. match是匹配字元 串,暫時不支援正則,會進行高亮顯示.紅色顯示.
  3. -show現在只支援row這一種方式,預設還是原來的緩衝輸出方式.

以下是一個測試指令碼:隨機列印數字 1.sh

    #!/bin/bash    for x in `seq 1 10` ; do        echo $x        sleep $[ ( $RANDOM % 4 )  + 1 ]s    done     //可以使用如下命令:   # cat 1.list | pdo -r 5 -y -show row  -match "5" -e 1.sh

還有更多的組合哦.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.