N、uo

一次linux可选择性实时同步

使用到的工具:

        python

        when-change

        可选 expect

下载安装when-changed后用when-change -r -v -1 /home/夏天 python test.py %f

%f 返回发生变化文件的路径

执行发现when-changed的反馈信息格式

==> '/home/f夏天/wc-test/1/2/2a.yml' modified <==

==> '/home/夏天/wc-test/1/2/New File' deleted <==

并且反馈完后端持续在when-change的控制窗口,等待监听下一次文件修改反馈


  • scp 免密码

给python加上scp执行命令后发现scp通过私钥链接同步机器需要键入密码

故将私钥加入免键入ssh里,执行过程

ssh-agent bash        #开启模式?好像是

ssh-add id_dsa        #添加私钥

ssh-add -l        #查看已添加私钥

###第一次scp新机器时需要手动执行一次并且键入关键词以添加信任###


  • python input错误

给puthon加上被动同步判断

for i in range(len(path)):

    print "%s. %s" % (i, path[i])

try:

    line = input("请键入不同步的序号: ")

except SyntaxError, e:

    line = ""

if line:

    split = line.split(" ")

    ids = []

    for input in split:

        index = int(input)

        if index >= len(path):

            print "不存在的序号 %s" % index

            continue

        ids.append(index)

    ids.sort(reverse=True)

    for id in ids:

        del path[id]

执行发现无法获取到input的序号,测试后得出问题为when-changed在包装时把input部分给包装成了str,故将input转换为str

解决方案:

    line = str(input("请键入不同步的序号: "))


  • when-change 参数-1

成功进行单次同步后发现调用python时when-changed就停止截取文件是否更新了

解决方案:去掉when-changed的控制参数-1,此参数意义为:如果在运行命令时文件发生了更改,不重新运行命令


  • scp上载目标机器无相应目录

多次测试后发现scp上载文件时若目标机器无相应文件目录则会返回未知目录报错

修复方案:

        1-1用python的os.system 执行ssh远程指令创建目录

        1-2再程序化执行scp指令

ssh user@ftpserver.com 'mkdir -p %s'        #%s为pyhon传过来的路径变量

#mkdir的 -p 参数为递归创建目录


  • 无法识别文件更新状态

测试中还发现when-changed返回变量%f只能返回路径,无法返回文件的更新状态【更新状态:创建,删除,修改】,加上变量-vvv后可在控制窗扣内发现when-changed自带控制台返回了

==> '/home/夏天/wc-test/1/2/2t.yml' modified at 2021-05-06 21:09:51.365490, running 'python /home/fuzhu/夏天/testscp.py %f' <==

格式为: 路径-更新状态-修改时间-执行程序- 执行代码

解决方案:

        思路python(when-changed(python))

        利用python的os.system执行when-changed指令,这样就能get到文件路径更新状态,python判断关键词进行是否执行删除ssh远程指令,否的情况就执行mkdir -p和scp指令


  • 被同步机删除文件出现空文件夹

删除文件行为同步后会出现较多的空文件夹

解决方案:

        使用find找出空文件夹并删除

        设定crontab定时执行

find /home/夏天 -type d -empty | xargs rm -rf

        这样唯一的坏处是无法递归删除空文件夹,可以执行多次也可以另外写递归shell


  • 总结

        when-changed最大问题无法检测到创建文件,建议本地构建完成文件后传输到同步机再进行同步;

        when-changed可能大概应该还是没有watchman好用

上一篇 下一篇
评论
©N、uo | Powered by LOFTER