這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
批量並發執行工具PDO,主要是解決批量執行的繁鎖,更安全便捷的操作工具.
本身是解決公司內部的一些問題,並且有很多特定環境的一些使用,現在抽離出其中都可以使用的部分.
- 工具名稱: pdo(parallel do something) https://github.com/ohlinux/pdo
安裝
依賴
- 需要有一個中控機與被管理機器建立了無密碼的密鑰關係.
- 需要有go語言的環境,進行編譯安裝.這裡沒有提供bin檔案.
- 自己所測試的環境有,centos macos.
編譯
先擷取依賴的第三方庫:
go get github.com/cihub/seeloggo get github.com/robfig/config
安裝go 環境.
go build pdo.go
設定檔目錄,預設在~/.pdo.如果不在此處指定.
pdo 結構
pdo 處理對象來源
擷取機器列表和相對應的路徑有三種途徑.(這裡去掉了資料庫這種特定的)
- -f 檔案,host的列表檔案,可以是一列,也可以是兩列有相關的目錄依賴.後面有例子.
- -a app名字;-p 產品名;-a支援多app採用 app1,app2逗號分隔. (這個是資料庫的來源,因為是特定環境的所以不再有)
- 標準輸入 cat 1.host | pdo
- -R當使用的時候,可以自動產生失敗的列表.詳細查看例子"Retry功能"
pdo 列表過濾
如果列表名稱是這樣的結構,xxx.yyy 那麼過濾的就是yyy,如果沒有這個需要,可以忽略.
- -i yf01,dbl01,cq02 過濾物理機房名稱,多個可用逗號隔開.
- -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
行顯示與匹配
這個功能有兩種使用情境:
- 有點類似multi tail 可以實現同時tail多個日誌,顯示在一個螢幕內,而且可以對match的字串進行高亮顯示.
- 如果輸出是單行輸出,沒有狀態顯示會顯示得加的美觀和可參考性.
所以這種顯示方式取決於時間的先後順序,交錯輸出.
拿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完成主從同步,說明第一步已經結束.
說明:
- 因為是tail -f 是不會主動退出命令,所以需要使用-y 和使用-r 來增加並發量,不然會先進行單台顯示 ,而不會顯示後面的.
- match是匹配字元 串,暫時不支援正則,會進行高亮顯示.紅色顯示.
- -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
還有更多的組合哦.