青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-162  評論-223  文章-30  trackbacks-0
腳本概述
   當需要在很多(比如幾十至幾百)臺機器上編譯同一程序時,如果一個個地手工拷貝源碼、再編譯,那么效率就很低,為了能大量節(jié)省手工、并行地編譯,因此寫了一個腳本,該腳本基于自動化腳本語言expect(expect基于tcl)實現(xiàn),基本原理是針對每個遠程主機,創(chuàng)建一個子進程,在該子進程內(nèi)先調(diào)用scp拷貝源碼到遠程主機,再用ssh登錄到遠程主機、發(fā)送cd、configure和make命令,交互期間的命令輸出多用正則分析,最終的編譯輸出保存到當前目錄output子目錄下。其命令行參數(shù)說明如下:
    第1參數(shù)為遠程主機配置文件:一個多行文本文件,每行格式為IP 用戶名 密碼,空格符分隔,支持#注釋。
    第2參數(shù)為本地主機源碼目錄:要求該目錄存在Makefile和configure文件。
    第3參數(shù)為遠程主機目標目錄:用于存放源碼的位置。

腳本實現(xiàn)
   拷貝源碼
 1proc copy_file {host user srcdir dstdir passwd {to 10} } {
 2    if [catch "spawn scp -rq $srcdir $user@$host:$dstdir" msg] {
 3        send_error "failed to spawn scp: $msg\n"
 4        exit 1
 5    }
 6    
 7    set timeout $to
 8    expect_after eof { 
 9        send_error "$host scp died unexpectedly\n"
10        exit 1
11    }
12    expect {
13        "(yes/no)?" { send "yes\r"; exp_continue }
14        -re "(?:P|p)assword:" { send "$passwd\r" }
15        timeout { do_timeout "$host scp" }
16    }
17
18    expect {
19        full_buffer { exp_continue }
20        timeout { exp_continue }
21        eof 
22    }
23}
   第2行調(diào)用spawn命令執(zhí)行scp命令,并用catch捕捉錯誤;當執(zhí)行成功后,第12行用expect等待遠端輸出(超時默認為10秒),第13、14行自動輸入用戶名和密碼,當過程中網(wǎng)絡連接斷開時,會匹配到第8行的eof;當輸出完成連接關閉時,會匹配到第21行的eof;如果輸出太多超過expect內(nèi)部的buffer時,會匹配到第19行的full_buffer,這里由于為了提高效率,使用了靜默方式的scp,因些實際會匹配到第20行的timeout,不管匹配到哪種情況,都要繼續(xù)直到eof。
 
   執(zhí)行編譯
 1proc do_make {host user passwd subdir {to 10} } {
 2    if [catch {spawn ssh $user@$host} msg ] {
 3        send_error "failed to spawn ssh: $msg\n"
 4        exit 1
 5    }
 6    
 7    set timeout $to
 8    expect_after eof { 
 9        send_error "$host ssh died unexpectedly\n"
10        exit 1
11    }
12    
13    expect {  
14        "*yes/no" { send "yes\r"; exp_continue }
15        -re "(?:P|p)assword:" { send "$passwd\r" }  
16        timeout { do_timeout "$host ssh" }
17    }  
18    wait_cmd $spawn_id passwd
19
20    send "cd $subdir\r"  
21    wait_cmd $spawn_id cd
22    
23    send "source configure\r"
24    wait_cmd $spawn_id configure
25
26    send "make\r"  
27    wait_cmd $spawn_id make
28
29    send "exit\r"  
30    expect eof  
31}
   關于spawn和expect的解釋與上節(jié)拷貝源碼相同,不同的是依次發(fā)送命令cd、source configure、make,每個命令須等到命令提示符后(調(diào)用自定義函數(shù)wait_cmd)再發(fā)下一個,最后發(fā)送exit退出ssh、導致連接關閉,匹配到最后一行的eof。對于有的項目源碼,可能沒有或不用配置,那么configure文件可以不存在或內(nèi)容為空,如果不存在導致報錯也沒關系,不影響make;如果configure出錯,那么make也會出錯。這里使用source是為了使配置在當前shell中生效。
   
   主循環(huán)
 1set f [open $file r]
 2set curtime [clock seconds]
 3
 4log_user 0
 5set s {[:blank:]}
 6set pattern "^(\[^#$s]+)\[$s]+(\[^$s]+)\[$s]+(\[^$s]+)"
 7
 8while { [gets $f line] != -1 } {
 9    if { ![regexp $pattern [string trimleft $line] ? host user passwd] } {
10        continue
11    }
12    send_user "$host $user $passwd\n"
13    if { ![fork] } {
14        
15        set filename output/${host}_[clock format $curtime -format %y.%m.%d_%H.%M.%S].log
16        log_file -noappend -a $filename
17
18        copy_file $host $user $srcdir $dstdir $passwd 30
19        do_make $host $user $passwd $subdir 30
20
21        send_user "$host finish\n"
22        exit
23    }
24}
   打開遠程主機配置文件,讀取每一行直到文件尾,忽略注釋行,用正則提取IP、用戶名和密碼,創(chuàng)建子進程,按IP和當前時間命名log文件(由于前面調(diào)用log_user 0關閉了控制臺輸出,因此為了能記錄輸出到日志文件,一定要加-a選項),最后調(diào)用函數(shù)copy_file和do_make。
   
   完整腳本下載:autobuild.zip
posted on 2016-09-28 11:04 春秋十二月 閱讀(3858) 評論(0)  編輯 收藏 引用 所屬分類: System
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产一区二区三精品乱码| 性欧美激情精品| 欧美午夜一区| 欧美午夜无遮挡| 国产精品久久久久91| 国产精品视频一二| 国产一区二区无遮挡| 国产亚洲精品资源在线26u| 国产一区二区三区电影在线观看 | 这里只有精品电影| 亚洲在线不卡| 久久亚洲国产成人| 亚洲国产精选| 亚洲网在线观看| 久久久久久伊人| 欧美精品在线一区| 国产日韩一级二级三级| 亚洲国产黄色片| 亚洲欧美中文另类| 免费在线看成人av| 夜夜嗨av一区二区三区四季av| 亚洲欧美精品suv| 欧美成人在线免费观看| 国产精品视频xxx| 亚洲欧洲精品天堂一级| 香港久久久电影| 亚洲国产合集| 久久精品二区三区| 欧美午夜视频在线| 亚洲国产精品一区二区www在线| 一本色道久久综合亚洲精品不| 欧美诱惑福利视频| 亚洲人成在线播放网站岛国| 欧美一区二区三区男人的天堂| 免费视频亚洲| 国产在线精品成人一区二区三区| 日韩午夜一区| 欧美韩国在线| 久久精品日韩| 国产婷婷97碰碰久久人人蜜臀| 9人人澡人人爽人人精品| 免费不卡在线观看| 亚洲在线免费| 国产精品久久久久婷婷| 亚洲精品老司机| 午夜久久黄色| 亚洲伦理网站| 久久一区激情| 亚洲女ⅴideoshd黑人| 欧美日本亚洲视频| 亚洲日本va在线观看| 久久五月天婷婷| 欧美一区二区国产| 国产日韩欧美精品| 欧美一区二视频在线免费观看| 亚洲精品免费看| 欧美—级a级欧美特级ar全黄| 在线播放豆国产99亚洲| 久久综合狠狠综合久久综合88| 亚洲男人的天堂在线观看| 欧美日韩免费在线观看| 在线亚洲一区| 99精品国产一区二区青青牛奶| 欧美国产一区二区| 亚洲免费电影在线观看| 亚洲精品久久久久| 国产精品va在线播放| 亚洲综合不卡| 亚洲欧美日韩高清| 国产一区在线视频| 久久只精品国产| 免费亚洲电影| 亚洲午夜在线| 午夜亚洲性色福利视频| 狠狠色丁香久久综合频道| 狂野欧美激情性xxxx| 毛片基地黄久久久久久天堂| 亚洲精品视频免费观看| 日韩一区二区福利| 国产日韩欧美在线视频观看| 欧美**字幕| 欧美激情免费在线| 亚洲免费一级电影| 久久精品主播| 在线视频精品一| 亚洲欧美日韩人成在线播放| 国内精品久久久久影院色| 亚洲黄一区二区三区| 国产精品国产三级国产aⅴ浪潮| 久久九九免费视频| 欧美黄色日本| 欧美在线国产精品| 美女视频黄a大片欧美| 中日韩男男gay无套| 久久精品九九| 亚洲一区二区三区精品在线| 欧美在线亚洲在线| 亚洲另类在线一区| 欧美一级二区| 一区二区三区欧美| 久久99在线观看| 亚洲已满18点击进入久久| 欧美自拍偷拍| 亚洲欧美日韩精品久久久久| 麻豆精品网站| 欧美在线免费看| 欧美日韩在线视频观看| 老司机免费视频一区二区| 久久男人av资源网站| 欧美日韩在线观看视频| 麻豆免费精品视频| 国产精品视频xxx| 亚洲精品美女在线观看| 国语精品一区| 亚洲愉拍自拍另类高清精品| 99国产精品久久| 久久久青草青青国产亚洲免观| 亚洲一区欧美一区| 欧美伦理a级免费电影| 欧美成人精品一区二区三区| 国产欧美韩日| 亚洲综合色视频| 亚洲在线黄色| 欧美视频免费看| 亚洲人体大胆视频| 亚洲国产精品综合| 久久久久久一区二区| 久久九九免费| 国际精品欧美精品| 欧美亚洲视频在线看网址| 亚洲欧美视频在线观看| 欧美日韩无遮挡| 亚洲美女在线看| 亚洲精品视频二区| 欧美电影在线免费观看网站| 欧美激情乱人伦| 亚洲人成网站精品片在线观看| 欧美中文字幕久久| 久久精品日产第一区二区| 国产午夜一区二区三区| 欧美一区二区三区电影在线观看 | 欧美中文在线视频| 国产欧美精品日韩区二区麻豆天美| 中文高清一区| 亚洲一区视频在线| 国产精品人人做人人爽| 亚洲欧美激情在线视频| 欧美一进一出视频| 国产日韩欧美精品一区| 欧美一区二区精美| 久久久亚洲影院你懂的| 亚洲国产aⅴ天堂久久| 欧美α欧美αv大片| 亚洲欧洲另类国产综合| 亚洲一区二区在线看| 国产欧美日韩综合一区在线观看| 久久丁香综合五月国产三级网站| 美女成人午夜| 亚洲免费不卡| 国产毛片一区二区| 久久免费黄色| 日韩一级免费观看| 久久免费国产| 亚洲图片欧美一区| 国产亚洲第一区| 欧美国产日韩一区二区| 亚洲影视综合| 欧美黑人一区二区三区| 香蕉尹人综合在线观看| 亚洲国产美女| 国产精品美女| 欧美大片专区| 亚洲欧美视频在线观看视频| 欧美国产日韩在线| 欧美在线不卡| 洋洋av久久久久久久一区| 欧美视频在线免费看| 最新国产乱人伦偷精品免费网站 | 欧美专区在线观看一区| 亚洲欧洲一区二区在线播放| 欧美一区在线视频| 亚洲裸体俱乐部裸体舞表演av| 国产精品国内视频| 美国成人直播| 久久精品国产综合| 亚洲在线观看| 99国产一区| 亚洲国产高清自拍| 久久综合网色—综合色88| 亚洲一区二区三区高清| 亚洲精品国产精品国自产观看浪潮 | 欧美高清视频一二三区| 亚洲欧美精品在线观看| 亚洲精品日韩在线| 欧美成人黑人xx视频免费观看| 欧美一二区视频| 亚洲欧美福利一区二区| 日韩视频免费在线观看| 亚洲电影在线免费观看| 国内伊人久久久久久网站视频|