2006年7月6日

          Unison使用文檔

          一:Unison簡介

          Unison是windows和unix平臺下都可以使用的文件同步工具,它能使兩個文件夾(本地或網(wǎng)絡(luò)上的)保持內(nèi)容的一致。unison擁有其它一些同步工具或文件系統(tǒng)的相同特性,但也有自己的特點:
                跨平臺使用;
                對內(nèi)核和用戶權(quán)限沒有特別要求;
                unison是雙向的,它能自動處理兩分拷貝中更新沒有沖突的部分,有沖突的部分將會顯示出來讓用戶選擇更新策略;
                只要是能連通的兩臺主機,就可以運行unison,可以直接使用socket連接或安全的ssh連接方式,對帶寬的要求不高,使用類似rsync的壓縮傳輸協(xié)議
          Unison有文字界面和圖形界面,這里只介紹如何在文字界面下使用.

          二:安裝unison

          unison各種版本下載地址:
          http://www.seas.upenn.edu/~bcpierce/unison//download.html
          unison編譯器下載地址:
          http://caml.inria.fr/pub/distrib/ocaml-3.10
          其它有用鏈接;
          http://worldhello.net/doc/bcp/unison.html
          http://www.seas.upenn.edu/~bcpierce/unison//contrib.html
          http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#rshmeth
          http://linux.chinaunix.net/bbs/viewthread.php?tid=888250&extra=page%3D1%26amp%3Bfilter%3Dreward
          從以上地址可以下載各種平臺,各種版本的unison,有基于源碼安裝的,有二進制的,我下載的是二進制的,可以直接使用.這里介紹源碼安裝:
          源碼安裝unison
          Linux下從源碼包編譯安裝,需要一個叫做Objective Caml compiler的工具,版本至少3.0.7,可以從這里下載:http://caml.inria.fr/
          Ocaml安裝腳本如下:
          # tar -zxf ocaml-3.09.3.tar.gz
          # cd ocaml-3.09.3
          # ./configure
          # make world opt
          # make install
          Unison對版本要求很高,進行同步的兩臺主機需要相同版本的unison,所以這里使用和windows一致的版本2.13.16,unison-2.13.16.tar.gz
          安裝腳本如下:
          # tar -zxf unison-2.13.16.tar.gz
          # cd unison-2.13.16
          # make UISTYLE=text
          # make install
          之后將生成可執(zhí)行文件unison,將其cp到系統(tǒng)PATH即可。
          # cp ./unison /usr/local/bin

          三:配置雙機ssh信任

          由于unison在遠(yuǎn)程同步文件夾要登陸遠(yuǎn)程服務(wù)器,因此要配置兩機互相信任
          本例假設(shè)本地機為:10.178.1.132(linux)
                    遠(yuǎn)程機:10.178.1.110(solaris)
          1.   在兩臺機器上創(chuàng)建 RSA密鑰
          以下操作要在本地機和遠(yuǎn)程機上都執(zhí)行一遍
             (1)以 root 用戶登錄
             (2)在 root 用戶的 主目錄內(nèi)創(chuàng)建.ssh 目錄并設(shè)置正確的權(quán)限
             [root@gsgatzhapp1 ~]# mkdir ~/.ssh
             [root@gsgatzhapp1 ~]# chmod 700 ~/.ssh
            (3)使用 ssh-keygen 命令生成第 2 版本的 SSH 協(xié)議的 RSA 密鑰
             [root@gsgatzhapp1 ~]# ssh-keygen -t rsa
             Generating public/private rsa key pair.
             Enter file in which to save the key (/root/.ssh/id_rsa):
             Enter passphrase (empty for no passphrase):
             Enter same passphrase again:
             Your identification has been saved in /root/.ssh/id_rsa.
             Your public key has been saved in /root/.ssh/id_rsa.pub.
             The key fingerprint is:
             17:e4:7c:79:8d:a0:00:3b:d9:f7:7a:56:f3:ac:54:4d [email=oracle@gsgatzhapp1]oracle@gsgatzhapp1[/email]
             在提示保存私鑰(key)和公鑰(public key)的位置時,使用默認(rèn)值。 如果需要私鑰密碼(passphrase),則輸入一個私鑰密碼(如果使用私鑰密碼,使用 ssh 執(zhí)行遠(yuǎn)程命令時需要輸入私鑰密碼,因此,本案例中未使用私鑰密碼),因此,直接回車即可。
             2. 添加密鑰到授權(quán)密鑰文件(authorized key file)中
               (1)以 root 用戶登錄
               (2)在本地機上執(zhí)行
               [root@gsgatzhapp1 ~] # cd ~/.ssh
               [root@gsgatzhapp1.ssh]#ssh 10.178.1.132 cat /root/.ssh/id_rsa.pub >> authorized_keys
               [oracle@gsgatzhapp1.ssh]#ssh 10.178.1.110 cat /root/.ssh/id_rsa.pub >> authorized_keys
               [oracle@gsgatzhapp1.ssh]#scp authorized_keys 10.178.1.110:/root/.ssh/
          [oracle@gsgatzhapp1 .ssh]# chmod 600  /root/.ssh/authorized_keys
          (3)在遠(yuǎn)程機10.178.1.110 上:
          bash-2.05# chmod 600  /root/.ssh/authorized_keys
              (4)測試
               完成后,在 gsgatzhapp1 上執(zhí)行:
               [root@gsgatzhapp1 ~]# ssh 10.178.1.132  date
               [root@gsgatzhapp1 ~]#ssh 10.178.1.110 date
               如果不需要輸入密碼就出現(xiàn)系統(tǒng)日期,說明 SSH 配置成功。

          Unison使用文檔(下)

          四:unison的使用
          Unison可以在一臺主機上使用,同步兩個文件夾,也可以在網(wǎng)絡(luò)上是用。
          1:本地使用
          使用方法:
          #unison  111 222  #同步本地的111和222文件夾
          Contacting server...
          Looking for changes
          Warning: No archive files were found for these roots.  This can happen either
          because this is the first time you have synchronized these roots,
          or because you have upgraded Unison to a new version with a different
          archive format.  
          Update detection may take a while on this run if the replicas are
          large.
          Unison will assume that the 'last synchronized state' of both replicas
          was completely empty.  This means that any files that are different
          will be reported as conflicts, and any files that exist only on one
          replica will be judged as new and propagated to the other replica.
          If the two replicas are identical, then no changes will be reported.
          Press return to continue.[<spc>] Reconciling changes
          111          222              
                   <---- file       aaaaaaaaaaaaa  [f] ?
          Commands:
            <ret> or f or <spc>   follow unison's recommendation (if any)
            I                     ignore this path permanently
            E                     permanently ignore files with this extension
            N                     permanently ignore paths ending with this name
            m                     merge the versions
            d                     show differences
            x                     show details
            l                     list all suggested changes
            p or b                go back to previous item
            g                     proceed immediately to propagating changes
            q                     exit unison without propagating any changes
            /                     skip
            > or .                propagate from left to right
            < or ,                propagate from right to left

          <---- file       aaaaaaaaaaaaa  [f] f

          Proceed with propagating updates? [] y
          Propagating updates

          UNISON started propagating changes at 15:06:08 on 27 Aug 2007
          [BGN] Copying aaaaaaaaaaaaa
            from /222
            to /111
          [END] Copying aaaaaaaaaaaaa
          UNISON finished propagating changes at 15:06:08 on 27 Aug 2007
          Saving synchronizer state
          Synchronization complete  (1 item transferred, 0 skipped, 0 failures)
          如果檢測到兩個文件夾有所不同,unison會提示,讓你選擇相應(yīng)的操作。如上例所示.
          表示右邊222的文件夾有新的文件,是否同步到左邊的111文件夾,f表示force,然后將確認(rèn),進行更新,如果輸入?會有更詳細(xì)的介紹。
          2: unison遠(yuǎn)程使用
          使用方法:
          # unison <本地目錄> ssh://remotehostname(IP)/<遠(yuǎn)程目錄的絕對路徑>
          例如:
          # unison /home/AAA ssh://username@remotehostname(ip)//DB/path/BBB
          表示將本機的目錄/home/AAA和遠(yuǎn)端主機的/DB/path/BBB進行同步。一般的,需要兩臺機能ssh連接。
          注意 在主機和目錄間又多加了一個 "/"
          3:unison參數(shù)說明
          Unison有很多參數(shù),這里只介紹經(jīng)常使用的幾個,詳細(xì)的請參看unison手冊:
          "     -testserver
          測試連通性,連接到服務(wù)器即退出。示例:
          $ unison / ssh://opensou1@bluehost/    -servercmd=~/bin/unison -testserver
          如果服務(wù)器端 unison 可執(zhí)行文件不在默認(rèn)目錄下,甚至沒有 unison 命令(需要你編譯一個上傳到服務(wù)器),則需要使用 -servercmd 參數(shù)告訴要執(zhí)行的服務(wù)器 unison 命令位置。
          使用 -testserver 參數(shù),則成功鏈接即退出,也不會去執(zhí)行目錄的比較等后續(xù)操作。
          "     -servercmd xxx
          告訴 unison, 服務(wù)器端的 unison 命令是什么。參見上面的示例。
          "     -auto
          接受缺省的動作,然后等待用戶確認(rèn)是否執(zhí)行。
          "     -batch
          batch mode, 全自動模式,接受缺省動作,并執(zhí)行。
          "     -ignore xxx
          增加 xxx 到忽略列表中
          "     -ignorecase [true|false|default]
          是否忽略文件名大小寫
          "     -follow xxx
          是否支持對符號連接指向內(nèi)容的同步
          "     owner = true (保持同步過來的文件屬主)
          "     group = true (保持同步過來的文件組信息)
          "     perms = -1   (保持同步過來的文件讀寫權(quán)限)
          "     repeat = 1   (間隔1秒后,開始新的一次同步檢查)
          "     retry = 3    (失敗重試)
          "     sshargs = -C (使用ssh的壓縮傳輸方式)
          "     xferbycopying = true

          "     -immutable xxx
          不變目錄,掃描時可以忽略
          "     -silent
          安靜模式
          "     -times
          同步修改時間
          "     -path xxx 參數(shù)
          只同步 -path 參數(shù)指定的子目錄以及文件,而非整個目錄。-path 可以多次出現(xiàn),例如
            unison /home/username ssh://remotehost//home/username \
                -path shared \
                -path pub \
                -path .netscape/bookmarks.html
          4:通過配置文件來使用unison
          盡管可以完全通過命令行的方式來指定unison運行所需要的參數(shù),但我們還是推薦使用配置文件來進行配置使用unison,原因很簡單,看配置文件比看命令行容易理解,而且可管理性更強。
          默認(rèn)的配置文件夾位于~currentuser/.unison,即當(dāng)前用戶的home目錄下,windows則位于C:\Documents and Settings\currentuser\.unison,默認(rèn)的配置文件名是default.prf.
          運行這樣的命令:
          #unison exitgogo
          Unison將默認(rèn)讀取~currentuser/.unison/exitgogo.prf文件里的配置信息.我的配置信息在/root/.unison/exitgogo.prf,因此我們可以根據(jù)上面參數(shù)的介紹,把所有的參數(shù)配置信息寫入到一個.prf的文件中.
          下面是我的一個web應(yīng)用中兩個文件夾同步的配置信息:
          root = /sina/webdata
          root = ssh://root@192.168.60.121//sina/webdata
          #force =/sina/webdata
          ignore = Path as/*
          #prefer = ssh://root@192.168.60.121//sina/webdata
          batch = true
          #repeat = 1
          #retry = 3
          owner = true
          group = true
          perms = -1
          fastcheck=false
          rsync =false
          #debug=verbose
          sshargs = -C
          xferbycopying = true
          log = true
          logfile = /root/.unison/sina_122.1547.log
          說明如下:
          兩個root表示需要同步的文件夾
          force表示以本地的/var/www/bbsnew文件夾為標(biāo)準(zhǔn),將該目錄同步到遠(yuǎn)端。注意,如果指定了force參數(shù),那么unison就變成了單項同步了,也就是說會以force指定的文件夾為準(zhǔn)進行同步.
          Unison本身是可以雙向同步的,但是要做到雙向同步,就不要設(shè)置force參數(shù),如果設(shè)置了force參數(shù),就成了單項同步了,此時unison類似與sync.
          Unison雙向同步基本原理是:假如有A B兩個文件夾,A文件夾把自己的改動同步到B,B文件夾也把自己的改動同步到A,最后A B兩文件夾的內(nèi)容相同,是 A B文件夾的合集.
          Unison雙向同步的一個缺點是,對于一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,因為unison無法判斷以那個為準(zhǔn).
          ignore = Path表示忽略/sina/webdata下面的WEB-INF/tmp目錄,即同步時不同步它。
          batch = true,表示全自動模式,接受缺省動作,并執(zhí)行
          -fastcheck  true表示同步時使用文件的創(chuàng)建時間來比較兩地文件,如果這個選項為false,unison則將比較兩地文件的內(nèi)容.建議設(shè)置為true
          log = true表示在終端輸出運行信息。
          logfile則指定了同時將輸出寫入log文件。

          五:unison FAQ

          如何在和遠(yuǎn)程服務(wù)器同步大量數(shù)據(jù),上傳一部分?jǐn)?shù)據(jù)后,超時:
          9%  559:15 ETARead from remote host bluehost: Connection reset by peer
          Fatal error: Lost connection with the server
          實際操作中,最好的方法是,第一次先把要上傳的文件打成包,用 ftp 上傳,然后展開到服務(wù)器中,之后執(zhí)行一次 unison 同步即可

          posted @ 2007-12-28 11:08 JavaVM 閱讀(571) | 評論 (0)編輯 收藏

          [轉(zhuǎn)載] 幾個著名java開源緩存系統(tǒng)的介紹

          OSCache
          OSCache是個一個廣泛采用的高性能的J2EE緩存框架,OSCache能用于任何Java應(yīng)用程序的普通的緩存解決方案。
          OSCache有以下特點:
          緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。
          擁有全面的API--OSCache API給你全面的程序來控制所有的OSCache特性。
          永久緩存--緩存能隨意的寫入硬盤,因此允許昂貴的創(chuàng)建(expensive-to-create)數(shù)據(jù)來保持緩存,甚至能讓應(yīng)用重啟。
          支持集群--集群緩存數(shù)據(jù)能被單個的進行參數(shù)配置,不需要修改代碼。
          緩存記錄的過期--你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略(如果默認(rèn)性能不需要時)。
          官方網(wǎng)站 http://www.opensymphony.com/oscache/

          Java Caching System
          JSC(Java Caching System)是一個用分布式的緩存系統(tǒng),是基于服務(wù)器的java應(yīng)用程序。它是通過提供管理各種動態(tài)緩存數(shù)據(jù)來加速動態(tài)web應(yīng)用。
          JCS和其他緩存系統(tǒng)一樣,也是一個用于高速讀取,低速寫入的應(yīng)用程序。
          動態(tài)內(nèi)容和報表系統(tǒng)能夠獲得更好的性能。
          如果一個網(wǎng)站,有重復(fù)的網(wǎng)站結(jié)構(gòu),使用間歇性更新方式的數(shù)據(jù)庫(而不是連續(xù)不斷的更新數(shù)據(jù)庫),被重復(fù)搜索出相同結(jié)果的,就能夠通過執(zhí)行緩存方式改進其性能和伸縮性。
          官方網(wǎng)站 http://jakarta.apache.org/turbine/jcs/

          EHCache
          EHCache 是一個純java的在進程中的緩存,它具有以下特性:快速,簡單,為Hibernate2.1充當(dāng)可插入的緩存,最小的依賴性,全面的文檔和測試。

          官方網(wǎng)站 http://ehcache.sourceforge.net/

          JCache
          JCache是個開源程序,正在努力成為JSR-107開源規(guī)范,JSR-107規(guī)范已經(jīng)很多年沒改變了。這個版本仍然是構(gòu)建在最初的功能定義上。
          官方網(wǎng)站 http://jcache.sourceforge.net/

          ShiftOne
          ShiftOne Java Object Cache是一個執(zhí)行一系列嚴(yán)格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態(tài)的框架。
          官方網(wǎng)站 http://jocache.sourceforge.net/

          SwarmCache
          SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個局域網(wǎng)的其他主機進行通訊,是特別為集群和數(shù)據(jù)驅(qū)動web應(yīng)用程序而設(shè)計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應(yīng)用提供更好的性能支持。
          SwarmCache使用JavaGroups來管理從屬關(guān)系和分布式緩存的通訊。
          官方網(wǎng)站 http://swarmcache.sourceforge.net

          TreeCache / JBossCache
          JBossCache是一個復(fù)制的事務(wù)處理緩存,它允許你緩存企業(yè)級應(yīng)用數(shù)據(jù)來更好的改善性能。緩存數(shù)據(jù)被自動復(fù)制,讓你輕松進行JBoss服務(wù)器之間的集群工作。JBossCache能夠通過JBoss應(yīng)用服務(wù)或其他J2EE容器來運行一個MBean服務(wù),當(dāng)然,它也能獨立運行。
          JBossCache包括兩個模塊:TreeCache和TreeCacheAOP。
          TreeCache --是一個樹形結(jié)構(gòu)復(fù)制的事務(wù)處理緩存。
          TreeCacheAOP --是一個“面向?qū)ο?#8221;緩存,它使用AOP來動態(tài)管理POJO(Plain Old Java Objects)
          注:AOP是OOP的延續(xù),是Aspect Oriented Programming的縮寫,意思是面向方面編程。
          官方網(wǎng)站 http://www.jboss.org/products/jbosscache

          WhirlyCache
          Whirlycache是一個快速的、可配置的、存在于內(nèi)存中的對象的緩存。它能夠通過緩存對象來加快網(wǎng)站或應(yīng)用程序的速度,否則就必須通過查詢數(shù)據(jù)庫或其他代價較高的處理程序來建立。
          官方網(wǎng)站 https://whirlycache.dev.java.net/


          作者Blog:http://blog.csdn.net/creamsmallpig/

          posted @ 2007-05-10 14:12 JavaVM 閱讀(1177) | 評論 (2)編輯 收藏

          siteMesh的一個中文bug

          ?????? 經(jīng)前同事介紹,前幾天一直在試用siteMesh,在試用過程中發(fā)現(xiàn)一些不想被裝飾的頁面出現(xiàn)頁面顯示不全的問題。頁面上出現(xiàn)一小段HTML標(biāo)簽。提示異常為java.lang.IllegalStateException 大致意思是試圖寫多少多少字節(jié)卻只寫入了多少多少字節(jié)。非常郁悶。看了源代碼。發(fā)現(xiàn)應(yīng)該是com.opensymphony.module.sitemesh.filter.PageFilter包里的

          1?response.setContentLength(page.getContentLength());?

          沒有考慮中文的情況。解決方案是將會出現(xiàn)的中文情況考慮進去。

          1?int?originalLength?=?page.getContentLength();//原來的長度
          2?int?bodyCNLenght?=?page.getBody().getBytes().length-page.getBody().length();//內(nèi)容處理中文長度
          3?int?titleCNLength?=?page.getTitle().getBytes().length-page.getTitle().length();//title處理中文長度
          4?int?javascriptCNOfhead?=?page?instanceof?FastPage???((FastPage)page).getHead().getBytes().length-((FastPage)page).getHead().length()):0?;//head的長度,因為javascript中可能包括中文
          5?
          6?response.setContentLength(originalLength+bodyCNLenght+titleCNLength+javascriptCNOfhead);

          這個解決方案是從網(wǎng)上搜索出來的,我想應(yīng)該還有更好的解決方法。

          posted @ 2006-07-06 23:50 JavaVM 閱讀(1168) | 評論 (0)編輯 收藏

          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(1)

          我參與的團隊

          隨筆分類(2)

          隨筆檔案(3)

          收藏夾(3)

          JAVA技術(shù)論壇

          我的好友

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 环江| 西林县| 上虞市| 利津县| 通河县| 新民市| 江永县| 平谷区| 华阴市| 天镇县| 承德市| 晋城| 乾安县| 平和县| 洛阳市| 苍山县| 华容县| 中牟县| 新野县| 黑山县| 洛浦县| 遵义县| 玉山县| 新乐市| 丰顺县| 南通市| 嘉义县| 威海市| 盐山县| 洞口县| 晋江市| 静宁县| 德惠市| 小金县| 张家口市| 铜梁县| 察雅县| 泽普县| 曲沃县| 卓资县| 富锦市|