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

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

腳本實現
   拷貝源碼
 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行調用spawn命令執行scp命令,并用catch捕捉錯誤;當執行成功后,第12行用expect等待遠端輸出(超時默認為10秒),第13、14行自動輸入用戶名和密碼,當過程中網絡連接斷開時,會匹配到第8行的eof;當輸出完成連接關閉時,會匹配到第21行的eof;如果輸出太多超過expect內部的buffer時,會匹配到第19行的full_buffer,這里由于為了提高效率,使用了靜默方式的scp,因些實際會匹配到第20行的timeout,不管匹配到哪種情況,都要繼續直到eof。
 
   執行編譯
 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的解釋與上節拷貝源碼相同,不同的是依次發送命令cd、source configure、make,每個命令須等到命令提示符后(調用自定義函數wait_cmd)再發下一個,最后發送exit退出ssh、導致連接關閉,匹配到最后一行的eof。對于有的項目源碼,可能沒有或不用配置,那么configure文件可以不存在或內容為空,如果不存在導致報錯也沒關系,不影響make;如果configure出錯,那么make也會出錯。這里使用source是為了使配置在當前shell中生效。
   
   主循環
 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、用戶名和密碼,創建子進程,按IP和當前時間命名log文件(由于前面調用log_user 0關閉了控制臺輸出,因此為了能記錄輸出到日志文件,一定要加-a選項),最后調用函數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>
            久久漫画官网| 欧美日韩亚洲成人| 亚洲欧洲在线一区| 午夜电影亚洲| 欧美在线综合| 裸体一区二区三区| 最新69国产成人精品视频免费| 亚洲欧美经典视频| 亚洲深夜福利网站| 亚洲欧美亚洲| 久久视频在线免费观看| 欧美成人情趣视频| 欧美日韩在线视频一区二区| 国产精品毛片大码女人| 国产亚洲人成a一在线v站| 亚洲高清激情| 久久男人资源视频| 老司机久久99久久精品播放免费| 欧美大片免费看| 在线午夜精品| 久久伊人一区二区| 国产精品美女久久久久久2018| 国精品一区二区| 最新日韩在线视频| 欧美一区深夜视频| 亚洲三级电影全部在线观看高清| 亚洲一区二区三区免费在线观看| 久久激情视频| 国产精品高潮久久| 亚洲精品在线视频| 久久精品综合一区| 亚洲精品一区二区三| 久久九九免费视频| 国产精品乱码妇女bbbb| 亚洲三级影片| 久热这里只精品99re8久| 亚洲一区二区黄| 欧美一区二区三区另类| 欧美午夜精品| 一区二区国产在线观看| 另类图片国产| 午夜精品一区二区三区在线播放 | 欧美乱妇高清无乱码| 国产日韩欧美一区在线| 亚洲一区二区在线看| 亚洲电影中文字幕| 久久午夜影视| 亚洲国产国产亚洲一二三| 久久午夜色播影院免费高清| 亚洲欧美综合国产精品一区| 欧美日韩视频专区在线播放 | 国产精品入口麻豆原神| 这里只有精品丝袜| 亚洲欧洲日本mm| 免费在线视频一区| 亚洲欧洲日夜超级视频| 亚洲大胆视频| 欧美精品1区| 国产视频一区在线观看| 日韩亚洲欧美成人| 久久视频一区二区| 浪潮色综合久久天堂| 久久亚洲影院| 国产精品一二三| 一区二区视频免费在线观看| 夜夜精品视频| 久色婷婷小香蕉久久| 亚洲国产精品ⅴa在线观看 | 欧美久久在线| 欧美日韩成人一区| 欧美**字幕| 性欧美精品高清| 国产精品乱子久久久久| 亚洲欧美日韩在线播放| 亚洲欧美色一区| 亚洲激情视频在线观看| 欧美成人精品| 猫咪成人在线观看| 午夜欧美不卡精品aaaaa| 蜜桃久久精品一区二区| 夜夜嗨av一区二区三区免费区 | 国产日韩精品综合网站| 欧美中文字幕在线播放| 男人天堂欧美日韩| 99国产精品99久久久久久粉嫩| 国产欧美日韩视频| 一区二区三区视频在线看| 亚洲色无码播放| 日韩午夜在线电影| 久久精品国产久精国产思思| 99热在这里有精品免费| 先锋影音一区二区三区| 亚洲一区二区日本| 免费黄网站欧美| 亚洲午夜视频在线| 午夜精品久久久久久久男人的天堂| 亚洲精华国产欧美| 久久国产精品亚洲77777| 欧美在线精品一区| 欧美亚一区二区| 欧美综合第一页| 国产欧美日韩高清| 亚洲最黄网站| 日韩视频中文| 欧美色网在线| 久久精品男女| 国产亚洲精品资源在线26u| 99热精品在线观看| 欧美国产亚洲精品久久久8v| 欧美α欧美αv大片| 国产精品视频九色porn| 午夜影院日韩| 麻豆成人在线播放| 国产精品久久7| 欧美怡红院视频一区二区三区| 免费在线观看成人av| 一区二区三区日韩欧美| 欧美女激情福利| 先锋影音久久| 欧美激情国产精品| 亚洲免费中文字幕| 99国产精品久久久久久久成人热 | 久久大香伊蕉在人线观看热2| 日韩视频在线你懂得| 一区二区高清在线| 日韩视频在线一区二区三区| 欧美午夜a级限制福利片| 亚洲一区二区少妇| 99视频精品在线| 久久久久www| 欧美永久精品| 亚洲影视九九影院在线观看| 夜夜夜久久久| 国模一区二区三区| 国产一区二区三区在线观看免费| 久久婷婷国产综合尤物精品 | 久久国产88| 亚洲黄色性网站| 欧美国产大片| 中文av一区特黄| 久久久欧美精品sm网站| 性做久久久久久久免费看| 亚洲自拍另类| 亚洲精品一区二区三区不| 亚洲国产高清一区| 91久久精品www人人做人人爽| 欧美高清免费| 亚洲精品1区2区| 亚洲免费在线电影| 久久高清国产| 欧美伦理视频网站| 欧美调教视频| 欧美国产一区二区| 精品成人一区| 亚洲欧美清纯在线制服| 久久综合久色欧美综合狠狠| 美国十次成人| 国产欧美日韩中文字幕在线| 国产精品一区二区视频| 亚洲美女性视频| 亚洲欧美国产不卡| 欧美h视频在线| 红桃视频成人| 欧美在线一区二区三区| 亚洲一区二区三区四区视频| 嫩模写真一区二区三区三州| 亚洲激情网址| 久久se精品一区二区| 免费日韩av片| 久久婷婷麻豆| 尤物在线精品| 久久久亚洲综合| 亚洲在线视频一区| 国产精品一区二区你懂得| 99热免费精品| 一区二区三区四区蜜桃| 欧美国产精品久久| 国产香蕉97碰碰久久人人| 欧美亚洲综合另类| 亚洲精品视频免费| 欧美黄色aaaa| 亚洲精品一区久久久久久| 在线欧美不卡| 亚洲电影欧美电影有声小说| 久久精品国亚洲| 亚洲欧洲在线播放| 亚洲一区二区三区四区五区午夜| 国产精品一二三视频| 欧美一区日本一区韩国一区| 亚洲欧美欧美一区二区三区| 亚洲福利在线观看| 欧美国产丝袜视频| 欧美日韩精选| 午夜欧美不卡精品aaaaa| 久久久国产精品亚洲一区| 亚洲精品小视频在线观看| 亚洲午夜激情网站| 亚洲国产日韩欧美在线动漫| 亚洲国产精品成人精品| 欧美国产日韩二区|