用Python控制rsync?
我一直想写一个Python脚本,让它顺序运行几个rsync命令,把数据备份到另一台电脑上。
现在我只是有一个文本文件,里面写着我用的命令,然后我每次都复制粘贴到终端里,这样感觉有点傻。
我想用Python来帮我完成这个工作。我对如何使用subprocess.popen有一点模糊的了解,但我完全不知道怎么让Python直接和rsync互动,比如帮我输入密码。Python能做到这一点吗?
像这样:
if theProccess.proccessResponse == "Password:" :
theProccess.respond(string)
还是说我最好的办法就是让它,或者甚至是一个bash脚本,顺序运行rsync命令,然后我还得一次又一次地输入我的密码?
提前谢谢你。
9 个回答
我用rsync来备份我所有客户的网站。一个脚本是通过cron定时触发的,每个客户都有自己的Makefile,因为他们的需求不同。
与其每次都输入密码,不如使用ssh-keygen来生成一对公钥和私钥,然后把你的公钥放到远程机器上。这样你就可以实现安全的无密码连接了。这也意味着你不需要把rsync的端口暴露给外界。虽然一开始学习这个可能有点难,但其实并不复杂,掌握后ssh绝对会成为你的好帮手。
有一个很棒的Python模块,叫做RSyncBackup,是Colin Stewart写的,虽然不太知名,也没有太多文档,但非常实用。
这个模块默认没有提供在rsync命令中加入密码的方法,所以我对这个模块进行了修改,并在我的博客文章中讲述了这个过程:http://technofart.blogspot.com/2012/02/rsync-controlled-by-python.html
你可以在我文章的下载部分找到我修改过的模块链接。
使用密钥的解决方案也是个不错的主意。此外,很多rsync的实现会查找名为RSYNC_PASSWORD的环境变量,你可以设置这个变量。不过,要小心,如果你的环境变量对其他用户可见的话。