精华内容
下载资源
问答
  • 两台服务器间的文件同步是最简单的,也是多台服务器间同步的基础。 笔者参考了一篇使用Unison工具进行文件双向同步的文章,并用自己的实践加以改版 如下 Linux系统间文件双向同步搭建Unison版 一、Unison简介 ...

    两台服务器间的文件同步是最简单的,也是多台服务器间同步的基础。
    笔者参考了一篇使用Unison工具进行文件双向同步的文章,并用自己的实践加以改版
    如下

    Linux系统间文件双向同步搭建Unison版
    一、Unison简介
    Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:
    1.跨平台使用;
    2.对内核和用户权限没有特别要求;
    3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
    4.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

    环境如下:
    vm1 192.168.30.64
    vm2 192.168.30.65

    二、编译安装Unison
    Linux下通过源码包编译安装Unison时,需要用到Objective Caml compiler。
    通过以下方式安装
    [root@vm1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.0.tar.gz
    [root@vm1 ~]# tar -xzvf ocaml-4.02.0.tar.gz
    [root@vm1 ~]# cd ocaml-4.02.0
    [root@vm1 ocaml-4.02.0]# ./configure
    [root@vm1 ocaml-4.02.0]# make world opt
    [root@vm1 ocaml-4.02.0]# make install

    编译安装Unison
    [root@vm1 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz
    [root@vm1 ~]# tar -xzvf unison-2.48.3.tar.gz
    [root@vm1 ~]# cd unison-2.48.3
    [root@vm1 unison-2.48.3]# make UISTYLE=text
    [root@vm1 unison-2.48.3]# make install

    在执行make install的过程中,可能会出现以下错误提示:
    mv: cannot stat ‘/root/bin//unison’: No such file or directory
    make: [doinstall] Error 1 (ignored)
    cp unison /root/bin/
    cp: cannot create regular file ‘/root/bin/’: Is a directory
    make: * [doinstall] Error 1

    出现错误的原因在与Unison默认是将文件Copy到/root/bin目录,但Linux默认是没有该目录的,因此我们需要将生成的可执行文件unison复制到系统的PATH目录。
    [root@vm1 unison-2.48.3]# cp unison /usr/local/bin

    将可执行文件unison上传到远程主机192.168.30.65
    [root@vm1 unison-2.48.3]# scp unison root@192.168.30.65:/root/
    通过SSH登陆到远程主机,再将unison复制到vm2的PATH目录
    [root@vm2 ~]#cp unison /usr/local/bin

    三、配置ssh key信任
    建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。
    我们使用部署 OA应用程序的用户即可,如 我们的应用程序放在了 /home/oa/tomcat7/webapps/下面,我们可以使用oa用户进行登陆
    在两台服务器上创建oa用户的命令
    [root@vm1 ~]# useradd oa
    [root@vm1 ~]# passwd oa

    在vm1上创建key并配置vm2的信任
    [root@vm1 ~]# su – oa
    [oa@vm1 ~]$ ssh-keygen -t rsa
    在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
    在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
    之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/oa/.ssh/目录下。

    将公钥添加到vm2的 authorized_keys 文件中
    将文件上传到vm2
    [oa@vm1 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.30.65:/home/oa/

    使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中
    [oa@vm2 ~]$ mkdir .ssh
    [oa@vm2 ~]$ chmod 700 .ssh
    [oa@vm2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
    [oa@vm2 ~]$ chmod 600 ~/.ssh/authorized_keys

    同理,执行以下步骤在vm2上创建key并配置vm1的信任
    [root@vm2 ~]# su – oa
    [oa@vm2 ~]$ ssh-keygen -t rsa

    将文件上传到vm1
    [oa@vm2 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.30.64/home/oa/

    使用rsync用户SSH到登陆到vm1,并将公钥添加到 authorized_keys 文件中
    [oa@vm1 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

    重启SSH服务
    [root@vm1 ~]# service sshd restart
    [root@vm2 ~]# service sshd restart

    四、Unison的配置与使用
    直接使用已部署好的应用程序目录进行同步测试,配置前请先对应用程序进行备份。
    在实际部署中可先部署将应用程序部署在其中一台应用服务器上,然后使用同步工具测试时直接进行同步。

    在两台服务器上分别执行一次unison,如果出现提示确认,则直接敲回车选择默认值;
    如果报错提示权限问题请使用chown命令、chmod命令进行相应文件、文件夹的属主及执行权限的变更
    [oa@vm1 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.30.65//home/oa/tomcat7/webapps/OA/
    [oa@vm2 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.30.64//home/oa/tomcat7/webapps/OA/
    如果上述执行顺利,说明双向同步的环境已经搭建起来了,下面就是做一些配置 使文件同步常态化。

    修改两台服务器的unison配置文件,输入以下内容
    [oa@vm1 ~]$ vi /home/oa/.unison/default.prf

    #Unison preferences file 
    root = /home/oa/tomcat7/webapps/OA/
    root = ssh://oa@192.168.30.65//home/oa/tomcat7/webapps/OA/
    #force = 
    #ignore = 
    batch = true 
    #repeat = 1 
    #retry = 3 
    #owner = true 
    #group = true 
    #perms = -1 
    #fastcheck = false 
    #rsync = false 
    #sshargs = -C 
    #xferbycopying = true 
    log = true 
    logfile = /home/oa/.unison/unison.log 

    [oa@vm2 ~]$ vi /home/oa/.unison/default.prf

    #Unison preferences file 
    root = /home/oa/test 
    root = ssh://oa@192.168.30.64//home/oa/tomcat7/webapps/OA/ 
    #force = 
    #ignore = 
    batch = true 
    #repeat = 1 
    #retry = 3 
    #iowner = true 
    #igroup = true 
    #iperms = -1 
    #ifastcheck = false 
    #irsync = false 
    #isshargs = -C 
    #ixferbycopying = true 
    log = true 
    logfile = /home/oa/.unison/unison.log 

    相关注解如下:
    force表示会以本地所指定文件夹为标准,将该目录同步到远端。这里需要注意,如果指定了force参数,那么Unison就变成了单项同步了,也就是说会以force指定的文件夹为准进行同步,类似与rsync。
    Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。
    Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。
    ignore = Path表示忽略指定目录,即同步时不同步它。
    batch = true,表示全自动模式,接受缺省动作,并执行。
    -fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。
    log = true 表示在终端输出运行信息。
    logfile 指定输出的log文件。

    另外,Unison有很多参数,这里仅介绍常用的几个,详细的请参看Unison手册。
    -auto //接受缺省的动作,然后等待用户确认是否执行。
    -batch //batch mode, 全自动模式,接受缺省动作,并执行。
    -ignore xxx //增加 xxx 到忽略列表中
    -ignorecase [true|false|default] //是否忽略文件名大小写
    -follow xxx //是否支持对符号连接指向内容的同步
    owner = true //保持同步过来的文件属主
    group = true //保持同步过来的文件组信息
    perms = -1 //保持同步过来的文件读写权限
    repeat = 1 //间隔1秒后,开始新的一次同步检查
    retry = 3 //失败重试
    sshargs = -C //使用ssh的压缩传输方式
    xferbycopying = true”
    -immutable xxx //不变目录,扫描时可以忽略
    -silent //安静模式
    -times //同步修改时间
    -path xxx 参数 //只同步 -path 参数指定的子目录以及文件,而非整个目录,-path 可以多次出现。

    PS:Windows下的unison配置文件默认位于C:\Documents and Settings\currentuser.unison目录,默认的配置文件名是default.prf。

    五、测试
    在应用服务器vm1、vm2的 /home/oa/tomcat7/webapps/OA/目录中 新建一个文件
    [oa@vm1 OA]# touch app1.txt
    [oa@vm1 OA]# touch app2.txt

    在vm1上执行unison
    [oa@vm1 OA]# unison

    在vm1与vm2上查看文件是否同步
    [oa@vm1 ~]$ cd ./tomcat7/webapps/OA
    [oa@vm1 OA]$ ls
    app1.txt app2.txt
    [oa@vm2 ~]\$ cd ./tomcat7/webapps/OA
    [oa@vm2 OA]\$ ls
    app1.txt app2.txt

    均看到了“app1.txt app2.txtt”所有文件,说明文件同步已经成功!

    注意:第一次SSH连接的时候可能需要输入一次密码,之后就不需要输入了。

    六、定期或实时执行同步
    如果想要定期执行,则通过crontab计划任务来实现,例如通过以下方式设置每5分钟执行一次
    [root@vm1 ~]# su - oa
    [oa@vm1 ~]$ crontab -e
    /5 * * * /usr/local/bin/unison
    使计划任务生效 需要重启 crond服务
    [root@vm1 ~]# service crond restart

    本帮助文档改编自http://hx100.blog.51cto.com/44326/612301/

    unison这个工具很好用,只要把同步机制及目录设置好,只要在64、65中两台服务器的任意一台服务器执行定时同步任务,就能对文件进行双向同步。

    展开全文
  • Linux系统间文件双向同步搭建Unison版  一、Unison简介  Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步...


    Linux系统间文件双向同步搭建Unison版 
    一、Unison简介 
    Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点: 
    1.跨平台使用; 
    2.对内核和用户权限没有特别要求; 
    3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略; 
    4.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

    环境如下: 
    vm1 192.168.30.64 
    vm2 192.168.30.65

    二、编译安装Unison 
    Linux下通过源码包编译安装Unison时,需要用到Objective Caml compiler。 
    通过以下方式安装 
    [root@vm1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.0.tar.gz 
    [root@vm1 ~]# tar -xzvf ocaml-4.02.0.tar.gz 
    [root@vm1 ~]# cd ocaml-4.02.0 
    [root@vm1 ocaml-4.02.0]# ./configure 
    [root@vm1 ocaml-4.02.0]# make world opt 
    [root@vm1 ocaml-4.02.0]# make install

    编译安装Unison 
    [root@vm1 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz 
    [root@vm1 ~]# tar -xzvf unison-2.48.3.tar.gz 
    [root@vm1 ~]# cd unison-2.48.3 
    [root@vm1 unison-2.48.3]# make UISTYLE=text 
    [root@vm1 unison-2.48.3]# make install

    在执行make install的过程中,可能会出现以下错误提示: 
    mv: cannot stat ‘/root/bin//unison’: No such file or directory 
    make: [doinstall] Error 1 (ignored) 
    cp unison /root/bin/ 
    cp: cannot create regular file ‘/root/bin/’: Is a directory 
    make: * [doinstall] Error 1

    出现错误的原因在与Unison默认是将文件Copy到/root/bin目录,但Linux默认是没有该目录的,因此我们需要将生成的可执行文件unison复制到系统的PATH目录。 
    [root@vm1 unison-2.48.3]# cp unison /usr/local/bin

    将可执行文件unison上传到远程主机192.168.30.65 
    [root@vm1 unison-2.48.3]# scp unison root@192.168.30.65:/root/ 
    通过SSH登陆到远程主机,再将unison复制到vm2的PATH目录 
    [root@vm2 ~]#cp unison /usr/local/bin

    三、配置ssh key信任 
    建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。 
    我们使用部署 OA应用程序的用户即可,如 我们的应用程序放在了 /home/oa/tomcat7/webapps/下面,我们可以使用oa用户进行登陆 
    在两台服务器上创建oa用户的命令 
    [root@vm1 ~]# useradd oa 
    [root@vm1 ~]# passwd oa

    在vm1上创建key并配置vm2的信任 
    [root@vm1 ~]# su – oa 
    [oa@vm1 ~]$ ssh-keygen -t rsa 
    在提示保存私钥(key)和公钥(public key)的位置时,使用默认值; 
    在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。 
    之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/oa/.ssh/目录下。

    将公钥添加到vm2的 authorized_keys 文件中 
    将文件上传到vm2 
    [oa@vm1 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.30.65:/home/oa/

    使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中 
    [oa@vm2 ~]$ mkdir .ssh 
    [oa@vm2 ~]$ chmod 700 .ssh 
    [oa@vm2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys 
    [oa@vm2 ~]$ chmod 600 ~/.ssh/authorized_keys

    同理,执行以下步骤在vm2上创建key并配置vm1的信任 
    [root@vm2 ~]# su – oa 
    [oa@vm2 ~]$ ssh-keygen -t rsa

    将文件上传到vm1 
    [oa@vm2 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.30.64/home/oa/

    使用rsync用户SSH到登陆到vm1,并将公钥添加到 authorized_keys 文件中 
    [oa@vm1 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

    重启SSH服务 
    [root@vm1 ~]# service sshd restart 
    [root@vm2 ~]# service sshd restart

    四、Unison的配置与使用 
    直接使用已部署好的应用程序目录进行同步测试,配置前请先对应用程序进行备份。 
    在实际部署中可先部署将应用程序部署在其中一台应用服务器上,然后使用同步工具测试时直接进行同步。

    在两台服务器上分别执行一次unison,如果出现提示确认,则直接敲回车选择默认值; 
    如果报错提示权限问题请使用chown命令、chmod命令进行相应文件、文件夹的属主及执行权限的变更 
    [oa@vm1 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.30.65//home/oa/tomcat7/webapps/OA/ 
    [oa@vm2 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.30.64//home/oa/tomcat7/webapps/OA/ 
    如果上述执行顺利,说明双向同步的环境已经搭建起来了,下面就是做一些配置 使文件同步常态化。

    修改两台服务器的unison配置文件,输入以下内容 
    [oa@vm1 ~]$ vi /home/oa/.unison/default.prf

    #Unison preferences file 
    root = /home/oa/tomcat7/webapps/OA/
    root = ssh://oa@192.168.30.65//home/oa/tomcat7/webapps/OA/
    #force = 
    #ignore = 
    batch = true 
    #repeat = 1 
    #retry = 3 
    #owner = true 
    #group = true 
    #perms = -1 
    #fastcheck = false 
    #rsync = false 
    #sshargs = -C 
    #xferbycopying = true 
    log = true 
    logfile = /home/oa/.unison/unison.log 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    [oa@vm2 ~]$ vi /home/oa/.unison/default.prf

    #Unison preferences file 
    root = /home/oa/test 
    root = ssh://oa@192.168.30.64//home/oa/tomcat7/webapps/OA/ 
    #force = 
    #ignore = 
    batch = true 
    #repeat = 1 
    #retry = 3 
    #iowner = true 
    #igroup = true 
    #iperms = -1 
    #ifastcheck = false 
    #irsync = false 
    #isshargs = -C 
    #ixferbycopying = true 
    log = true 
    logfile = /home/oa/.unison/unison.log 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    相关注解如下: 
    force表示会以本地所指定文件夹为标准,将该目录同步到远端。这里需要注意,如果指定了force参数,那么Unison就变成了单项同步了,也就是说会以force指定的文件夹为准进行同步,类似与rsync。 
    Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。 
    Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。 
    ignore = Path表示忽略指定目录,即同步时不同步它。 
    batch = true,表示全自动模式,接受缺省动作,并执行。 
    -fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。 
    log = true 表示在终端输出运行信息。 
    logfile 指定输出的log文件。

    另外,Unison有很多参数,这里仅介绍常用的几个,详细的请参看Unison手册。 
    -auto //接受缺省的动作,然后等待用户确认是否执行。 
    -batch //batch mode, 全自动模式,接受缺省动作,并执行。 
    -ignore xxx //增加 xxx 到忽略列表中 
    -ignorecase [true|false|default] //是否忽略文件名大小写 
    -follow xxx //是否支持对符号连接指向内容的同步 
    owner = true //保持同步过来的文件属主 
    group = true //保持同步过来的文件组信息 
    perms = -1 //保持同步过来的文件读写权限 
    repeat = 1 //间隔1秒后,开始新的一次同步检查 
    retry = 3 //失败重试 
    sshargs = -C //使用ssh的压缩传输方式 
    xferbycopying = true” 
    -immutable xxx //不变目录,扫描时可以忽略 
    -silent //安静模式 
    -times //同步修改时间 
    -path xxx 参数 //只同步 -path 参数指定的子目录以及文件,而非整个目录,-path 可以多次出现。

    PS:Windows下的unison配置文件默认位于C:\Documents and Settings\currentuser.unison目录,默认的配置文件名是default.prf。

    五、测试 
    在应用服务器vm1、vm2的 /home/oa/tomcat7/webapps/OA/目录中 新建一个文件 
    [oa@vm1 OA]# touch app1.txt 
    [oa@vm1 OA]# touch app2.txt

    在vm1上执行unison 
    [oa@vm1 OA]# unison

    在vm1与vm2上查看文件是否同步 
    [oa@vm1 ~]$ cd ./tomcat7/webapps/OA 
    [oa@vm1 OA]$ ls 
    app1.txt app2.txt 
    [oa@vm2 ~]\$ cd ./tomcat7/webapps/OA 
    [oa@vm2 OA]\$ ls 
    app1.txt app2.txt

    均看到了“app1.txt app2.txtt”所有文件,说明文件同步已经成功!

    注意:第一次SSH连接的时候可能需要输入一次密码,之后就不需要输入了。

    六、定期或实时执行同步 
    如果想要定期执行,则通过crontab计划任务来实现,例如通过以下方式设置每5分钟执行一次 
    [root@vm1 ~]# su - oa 
    [oa@vm1 ~]$ crontab -e 
    /5 * * * /usr/local/bin/unison 
    使计划任务生效 需要重启 crond服务 
    [root@vm1 ~]# service crond restart

    本帮助文档改编自http://hx100.blog.51cto.com/44326/612301/

    unison这个工具很好用,只要把同步机制及目录设置好,只要在64、65中两台服务器的任意一台服务器执行定时同步任务,就能对文件进行双向同步。


    展开全文
  • 我先说一下业务逻辑需求,公司现在有一台app的服务器A,而我后台是放在另外一台服务器B上的,现在需要A服务器上的图片文件夹picture和B服务器上的picture图片文件夹数据同步。  在网上找了很的百度文档、博客、...

         我先说一下业务逻辑需求,公司现在有一台app的服务器A,而我后台是放在另外一台服务器B上的,现在需要A服务器上的图片文件夹picture<--------->和B服务器上的picture图片文件夹数据同步。

         在网上找了很多的百度文档、博客、技术论坛,但没有一篇是比较完整的,所以小编就用了一天的时间去尝试,把遇到的坑的部分都贴出来,我在这里就不说unison 和 inotify怎么安装了,相信大家在看我这篇文章的时候都已经安装过了,如果不会装的话可以去看一下这篇文章,里面有安装的过程,挺简单的,还有双机信任配置,在这里就不一一说了。。。。

    .有的人看了很多的教程都会有一个疑惑,究竟在unison的配置文件(default.prf)中写什么,在shell脚本中又写什么?有一些说只要配置default.prf就行,有一些又说写一个unison.sh脚本就行,而小编选择用default.prf来配置一些基本的信息,比如

    • -follow xxx 

    是否支持对符号连接指向内容的同步

    • owner = true (保持同步过来的文件属主)

    • group = true (保持同步过来的文件组信息)

    • perms = -1   (保持同步过来的文件读写权限)

    • repeat = 1   (间隔1秒后,开始新的一次同步检查)

    • retry = 3    (失败重试)

    • sshargs = -C (使用ssh的压缩传输方式)

    • xferbycopying = true

    • -immutable xxx 

    不变目录,扫描时可以忽略

    这些默认的配置信息,可能有人就好奇了,为什么这里没有写远程同步目录和本地同步目录和相关的服务器地址了,因为小编写在了unison.sh目中,

    以下是A服务器的执行脚本 unison.sh

    #!/bin/bash
    talent_ip="192.168.1.1"
    local_dir="/home/test1" /本地目录
    talent_dir="/home/test2/" /远程同步目录
    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $local_dir | while 
    read line; do
    /usr/local/bin/unison -batch $local_dir ssh://$talent_ip/$talent_dir
    echo -n "$line " >> /var/log/inotify.log
    echo `date | cut -d" " -f1-4` >> /var/log/inotify.log
    done

    以下是B服务器的执行脚本 unison.sh

    #!/bin/bash
    talent_ip="192.168.1.2"
    local_dir="/home/test1" /本地目录
    talent_dir="/home/test2/" /远程同步目录
    /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $local_dir | while 
    read line; do
    /usr/local/bin/unison -batch $local_dir ssh://$talent_ip/$talent_dir
    echo -n "$line " >> /var/log/inotify.log
    echo `date | cut -d" " -f1-4` >> /var/log/inotify.log
    done

    这样子就配置完成了,

    然后在A服务器上创建文件夹 testing 启动服务 unison -batch /home/test1 ssh://192.168.1.2//home/test2

    在B服务器下查看/home/test2文件夹 发现A服务器创建的文件夹已经同步过去了,但现在问题来了,

    1.当我发现在A服务器上创建文件夹能同步到A 但B服务器创建文件夹的时候却不能,当然,你还没在B服务器上面运行脚本进行互相监听.

    2.很多人也都也到过这样的问题,我不想每次修改过文件之后 都执行一次sh脚本,于是就在/etc/local上把脚本写进去,开机启动,reboot。。

    结果脚本启动不起来,看到网上很多的文章都说 把脚本写到/etc/rc.d/rc.local上面 而不要写在/etc/rc.lcoal上面,但小编想说的是现在linux很多平台 譬如:阿里 新浪 腾讯 云服务器上 linux中的 rc.local都是通过rc.d/rc.local软连接的,所以不管在哪里配置都是一样的,不排除一些不常规的安装系统例子,小编是从代码出发开始看的,首先考虑的是脚本在开机的时候是不是真的不执行脚本 还是一部分脚本程序出错了,所以我把脚本开头的/bin/bash换成了/bin/sh -x 这段代码的意思是当执行这段程序的时候包什么错,改完了之后 reboot,然后去到、var/log/messages查看系统日志

    小编发现了原来脚本在开机的时候有启动过,那就证明了脚本开机启动正常,所以有时候不要只看表面的意思 不要以为没气作用就认为没有启动,特别在我们写shell脚本的时候 我们可以在把脚本执行的情况写入到错误日志去查看,那样的话排查起来就很方便了。

       系统日志上面写着一句 fatal error linux HOME enivorenemnt viariable (致命错误 家目录的环境变量 不存在

    我就用echo $HOME  echo $PATH 查出了环境变量 发现是 /root 家目录  环境 /root/bin 而 /root下没有bin 所以最后就在脚本的开头加上了两句   export HOME ='/usr/bin'

    export PATH ='/usr/bin';就oK了 其实 这里就是一个环境变量的问题 reboot 搞定.....

    ps:最后小编想说的是很多网上的方法只是提供一个参考方式 方法 我们在用 在借鉴的时候一定要思考一下 这一定是对的嘛?因为每个人的开发环境和服务器环境都不同。。。。




    展开全文
  • 在项目中遇到一个问题,需要做到两台服务器的指定文件夹实时同步,例如:A服务器上传了一张1.jpg图片,B服务器对应文件夹立马就同步出来一张1.jpg图片。 准备材料 两台(多台)linux服务器,互相联通,最好可以...

    项目背景

    • 在项目中遇到一个问题,需要做到两台服务器的指定文件夹实时同步,例如:A服务器上传了一张1.jpg图片,B服务器对应文件夹立马就同步出来一张1.jpg图片。

    准备材料

    • 两台(多台)linux服务器,互相联通,最好可以通过内网访问。这里以两台服务器内网访问为例,A服务器ip:192.168.0.100,B服务器ip:192.168.0.101
    • 需要同步的文件夹,例如:A服务器:/www/A/upload B服务器/www/B/upload

    配置环境

    1. 安装Objective Caml compiler,注意:两台服务器都安装
    #yum install make  gcc gcc-c++
    #cd /tmp
    #wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz 
    #tar  -zxvf ocaml-4.03.0.tar.gz
    #cd ocaml-4.03.0
    #./configure
    #make world opt
    #make install
    
    1. 安装Unison,注意:两台服务器都安装
    #yum install ctags-etags
    #cd /tmp
    #wget  http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz
    #mkdir unison-2.48.4 && cd unison-2.48.4
    #tar -zxvf /tmp/unison-2.48.4.tar.gz
    #cd src
    #make UISTYLE=text THREADS=true
    #cp unison /usr/local/bin/
    
    //有版本信息出现则安装成功
    #unison -version
    
    1. 安装inotfy,注意:两台服务器都安装
    #yum -y install inotify-tools
    
    1. 配置双机SSH信任,注意:两台服务器都配置
    #yum install rsync -y 
    
    1. 在A服务器配置
    #ssh-keygen
    //连续按三次空格
    
    # cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
    
    //给权限
    # chmod 700 ~/.ssh
    # chmod 600 ~/.ssh/authorized_keys
    
    //需要输入一次密码 **注意:这里需要替换B服务器的ip**
    # rsync -avz /root/.ssh/authorized_keys root@192.168.0.101:/root/.ssh/authorized_keys
    
    1. 在B服务器配置
    #ssh-keygen
    //连续按三次空格
    
    # cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
    
    //给权限
    # chmod 700 ~/.ssh
    # chmod 600 ~/.ssh/authorized_keys
    
    //需要输入一次密码 **注意:这里需要替换A服务器的ip**
    # rsync -avz /root/.ssh/authorized_keys root@192.168.0.100:/root/.ssh/authorized_keys
    
    1. 现在可以测试一下是否配置成功
    //A服务器测试
    #ssh -p 22  192.168.0.101 date
    
    //B服务器测试 
    #ssh -p 22  192.168.0.100 date
    
    //如果没有出现输入密码的现象,就说明配置成功
    
    1. 配置双机同步
    • A服务器配置
    //先进入/tem/uniso/src/目录
    #mkdir -p /root/.unison/
    #vim /root/.unison/default.prf
    
    //配置的内容,以下内容里的“#”号也不能少
    #Unison preferences file
    
    //root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
    //这里是A服务器的文件夹地址
    root = /www/A/upload/
    
    //这里是B服务器的ip和文件夹地址
    root = ssh://root@192.168.0.101//www/B/upload/
    
    //path 指定的文件夹如果是upload整个目录不用指定path,如果要指定哪几个文件夹,可以在下方加上path
    #path = upload
    #path = image
    #force =
    #ignore =
    batch = true
    maxthreads = 300
    #repeat = 1
    #retry = 3
    owner = true
    group = true
    
    //使用ssh压缩传输方式
    perms = -1
    fastcheck = false
    
    //true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
    rsync = false
    
    //保持同步过来保持读写权限
    sshargs = -C
    xferbycopying = true
    
    //默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
    confirmbigdel = false
    log = true
    logfile = /root/.unison/unison.log
    
    • B服务器配置
    //先进入/tem/uniso/src/目录
    #mkdir -p /root/.unison/
    #vim /root/.unison/default.prf
    
    //配置的内容,以下内容里的“#”号也不能少
    #Unison preferences file
    
    //root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
    //这里是B服务器的文件夹地址
    root = /www/B/upload/
    
    //这里是A服务器的ip和文件夹地址
    root = ssh://root@192.168.0.100//www/A/upload/
    
    //path 指定的文件夹如果是upload整个目录不用指定path,如果要指定哪几个文件夹,可以在下方加上path
    #path = upload
    #path = image
    #force =
    #ignore =
    batch = true
    maxthreads = 300
    #repeat = 1
    #retry = 3
    owner = true
    group = true
    
    //使用ssh压缩传输方式
    perms = -1
    fastcheck = false
    
    //true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
    rsync = false
    
    //保持同步过来保持读写权限
    sshargs = -C
    xferbycopying = true
    
    //默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
    confirmbigdel = false
    log = true
    logfile = /root/.unison/unison.log
    

    创建脚本文件 注意:两台服务器都要创建

    //到usr目录下创建
    #cd /usr
    #vim unison.sh
    //内容
    #/bin/bash
    src="/usr/Tomcat/" 
    /usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
    /usr/local/bin/unison 
    echo -n "$(date +%F-%T) $line" >> /var/log/inotify.log
    done
    //执行脚本
    #sh unison.sh
    

    让脚本后台执行

    #chmod +x  unison.sh
    #nohup ./unison.sh >/dev/null 2>&1 &
    

    至此,就请测试见证奇迹吧

    实现多台同步的思路图
    引用原文地址

    展开全文
  • ·支持单向同步、双向同步、增量备份、完全备份等各种类型的文件同步与备份方式 ·具有多种任务自动触发模式,能实时、定时、间隙、系统空闲或手动地启动任务 ·强大的容错功能,任务执行时的操作错误自动记录,...
  • 文件同步

    2019-01-22 10:56:55
    因为要做双向同步,在两台服务器均安装cwRsyncServer4.1(由于服务端包含了客户端的功能,这里只安装服务器端。 找到ICW文件夹下rsyncd.conf文件,此为服务端配置文件。修改内容如下: use chroot = false strict ...
  • 文件同步软件

    2014-08-03 09:31:00
    GoodSync提供了真实可信的双向同步功能,并且能够防止文件被简单删除或数据丢失。 【功能特点】  真正的双向文件和文件夹同步;简单易用的单项同步;可以同时执行个同步任务。当文件被改变或移动设备插入时,...
  • 8、支持单向同步、双向同步、增量备份、完全备份等各种文件同步与备份的方式。 9、支持频率备份选择,能按月、按周、按日、按时、间隔或手动地启动任务。 10、智能的增量备份恢复功能,能够恢复出与每次执行时源...
  • 8、支持单向同步、双向同步、增量备份、完全备份等各种文件同步与备份的方式。 9、支持频率备份选择,能按月、按周、按日、按时、间隔或手动地启动任务。 10、智能的增量备份恢复功能,能够恢复出与每次执行时源...
  •  8、支持单向同步、双向同步、增量备份、完全备份等各种文件同步与备份的方式。  9、支持频率备份选择,能按月、按周、按日、按时、间隔或手动地启动任务。  10、智能的增量备份恢复功能,能够恢复出与每次...
  • 凌波多媒体电子教室

    2012-06-25 11:26:41
    多点监看:凌波多媒体电子教室软件支持多个窗口的同步同时监看,也可以把监看窗口分布到多台机器上,实时监看其他各学生机的状态; 影音广播:凌波多媒体电子教室软件支持更多的影音文件格式,支持vcd、mp3、avi、...
  • 凌波多媒体教室6.6版

    2009-11-04 23:19:10
    口分布到多台机器上,实时监看其他各学生机的状态 9. 自动登录:学生机开机后自动登录到教师机 10. 易学易用:安装简单,运行稳定,操作介面人性化,各功能都使 用统一的操作模式 11. 组网容易:不需要...
  • 多媒体教室

    2013-06-14 08:10:31
    如果网络中有 Windows NT 4.0 或 Windows 2000 服务器,并且服务器上安装有 DHCP 服务,此时学生机网卡所绑定的 TCP/IP 协议的设置上可以设为自动获取 IP 地址。如果网络中没有服务器服务器上没有安装 DHCP 服务,...
  • 数据卫兵 v2.1.1.8.zip

    2019-07-14 09:01:54
    提供双向同步的备份方式,满足您备份同步需求;  9. 任务执行时中途可以随时中止,已经备份的文件将自动作记录,下次执行不再重复备份;  10.详尽的执行日志,详细记录每次任务所有文件的操作及操作结果;  ...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    域环境下的帐号转置 集中式管理的简介 配置单向和双向委托 理解委托域和受托域之间的差别 使用内建组管理委托 理解传递身份审核 跨越委托向用户授权访问资源 管理被破坏的委托关系理解委托的不可传递性问题 服务器...
  • 2、整合论坛:整合discuz X论坛,整合phpwind论坛(业界独家整合,双向同步)。 3、查看联系方式收费:可设置查看信息的联系方式收费,以及扣除的金币数量。 4、整合QQ登录:整合QQ应用登录。 5、手机访问:新增手机...
  • 实例143 删除上传到服务器指定文件夹中的数码照片 231 实例144 批量上传数码相片 232 5.5 Panel容器控件 236 实例145 使用Panel控件显示或隐藏一组控件 236 实例146 动态切换Panel容器中的内容 237 5.6 日历控件 239...
  • 实例143 删除上传到服务器指定文件夹中的数码照片 231 实例144 批量上传数码相片 232 5.5 Panel容器控件 236 实例145 使用Panel控件显示或隐藏一组控件 236 实例146 动态切换Panel容器中的内容 237 5.6 日历控件 239...
  • 实例143 删除上传到服务器指定文件夹中的数码照片 231 实例144 批量上传数码相片 232 5.5 Panel容器控件 236 实例145 使用Panel控件显示或隐藏一组控件 236 实例146 动态切换Panel容器中的内容 237 5.6 日历控件 239...
  • 支持报警继电器联动,一个位号可以跨串口联动个模块和继电器号,支持。 本地数据存储支持sqlite+mysql,支持远程数据同步到云端数据库。自动重连。 本地设备采集到的数据实时上传到云端,以便手机APP或者web...
  • 实例272 和服务器时间同步 350 实例273 取得网络中的SQL服务器名 351 8.5 数据库维护 352 实例274 数据库登录配置 352 实例275 SQL Server数据库的备份和恢复 353 实实276 数据库附加、分离 355 实例277...
  • 全书共提供500个实例,每个实例都突出了其实用性。 《delphi程序开发范例宝典(第3版)》适用于delphi编程人员,也可供大中专院校相关专业的师生学习参考。 《delphi程序开发范例宝典(第3版)》 第1章 窗体与界面...
  • 全书共提供500个实例,每个实例都突出了其实用性。 《delphi程序开发范例宝典(第3版)》适用于delphi编程人员,也可供大中专院校相关专业的师生学习参考。 《delphi程序开发范例宝典(第3版)》 第1章 窗体与界面...
  • asp.net知识库

    2015-06-18 08:45:45
    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...
  • 认真听课、思考问题、动手操作、有问题一定要问、参与讨论、帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程...
  • 在中国版协、中国出版科学研究所、《出版参考》杂志组织的“2005年度输出版、引进版优秀图书”评选活动中获得“2005年度引进版科技类优秀图书”奖其第4版被家IT相关机构和媒体联合评为“2006年最受读者喜爱的十大...
  • 新增RecycleView布局例子; 升级第三方依赖库; 修改文档说明。 更日志 AndroidX分支 注:1.x-废弃版(最后版本:1.2.6.1)、2.x-顺手版(最后版本:2.0.10)已停止维护,建议使用当前3.x-健壮版(最后...
  • 25.1.1 表示文件和文件夹的.NET类 25.1.2 Path类 25.1.3 示例:文件浏览器 25.2 移动、复制和删除文件 25.2.1 FilePropertiesAndMovement示例 25.2.2 示例FilePropertiesAnd-Movement的代码 25.3 读写文件 25.3.1 ...
  • 25.1.1 表示文件和文件夹的.NET类 25.1.2 Path类 25.1.3 示例:文件浏览器 25.2 移动、复制和删除文件 25.2.1 FilePropertiesAndMovement示例 25.2.2 示例FilePropertiesAnd-Movement的代码 25.3 读写文件 25.3.1 ...
  • 25.1.1 表示文件和文件夹的.NET类 25.1.2 Path类 25.1.3 示例:文件浏览器 25.2 移动、复制和删除文件 25.2.1 FilePropertiesAndMovement示例 25.2.2 示例FilePropertiesAnd-Movement的代码 25.3 读写文件 25.3.1 ...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

多台服务器双向同步文件夹