我有一个rsync备份脚本,用于在两个ubuntu服务器(位于不同国家/地区)之间传输数据.备份的数据在文件数量方面非常大.它总共大约17GB.该脚本在接收器服务器上运行.所以,它基本上是拉动.用于登录的公钥 – 私钥认证.

脚本运行正常;备份已经成功发展了好几个月了.

最近,在过去6天左右,备份尚未完成. rsync进程运行大约45分钟左右.然后就结束了.我不知道它为什么会停止.从我所看到的,它甚至没有完成构建和扫描文件列表.我将cron输出定向到日志文件.在日志中,我看到的只有:接收文件列表……完成.但是我可以看到没有任何东西被转移到备份目的地.

如果我手动运行脚本,大约45分钟后,我就会看到:./ sync.sh:第51行:9078 KILL $RSYNC $OPTIONS $SOURCE $DESTINATION

如何以及在何处查看失败的原因?我如何知道哪个服务器实际上正在杀死进程,发送方或接收方?

拉动机器(脚本运行的地方)是一个低端盒子.它是一个具有256MB RAM的KVM VM.所以,我想知道文件结构的构建是否占用了太多RAM,从而导致OOM错误.但是我如何检查是否是这种情况?此外,文件没有显着增加导致突然失败.

任何提示将不胜感激.

谢谢.

更新1

正如@APZ所建议的,我添加了几个详细的标志(总共3个)并手动运行脚本,将输出重定向到文件.这是最后的输出:

(.... lots of file names....)
received 5795917 names
done
recv_file_list done
get_local_name count=5795917 /storage/  <======== Reached here after about 40 minutes. Was stuck here for about 10 minutes or so.
[Receiver] _exit_cleanup(code=14,file=main.c,line=788): about to call exit(14)

rsync: fork Failed in do_recv: Cannot allocate memory (12)
rsync error: error in IPC code (code 14) at main.c(788) [Receiver=3.0.9]

要回答@TimHaegele,据我所知,VM主机(Prometeus / IperWeb)不会对cpu,IO或其他任何内容进行任何限制.不过,我可以问他们.他们的评价极高.

我在VM上的Ubuntu安装配置了512 MB交换.也许我可以增加2 GB左右?磁盘空间不是问题.

当rsync运行时,这是free -m的输出:

total       used       free     shared    buffers     cached
Mem:           239        236          2          0          0          3
-/+ buffers/cache:        232          7
Swap:          511        510          1

基于这些证据,如所建议的那样,更改SSH守护程序设置是否仍然有所作为?

更新2

共识似乎是低内存是问题.所以,我添加了一个2GB的新交换文件并将其激活.所以,现在我总共有2.5 GB的掉期.

然后,我再次运行脚本(手动).这次,它跑了90多分钟.它此时正在传输文件.但突然之间,这个过程就退出了.在日志中,我看到它终止时出现以下错误:

Invalid packet at end of run (4330026) [sender]
[generator] _exit_cleanup(code=12,file=io.c,line=1532): about to call exit(12)
rsync error: protocol incompatibility (code 2) at main.c(695) [sender=3.0.7]
rsync: writefd_unbuffered Failed to write 23 bytes to socket [generator]: broken pipe (32)
rsync error: error in rsync protocol data stream (code 12) at io.c(1532) [generator=3.0.9]
[receiver] _exit_cleanup(code=19,line=1316): about to call exit(19)
rsync error: received SIGUSR1 (code 19) at main.c(1316) [receiver=3.0.9]

如您所见,发送方机器有3.0.7,接收器(拉出器)有3.0.9.我不太明白错误是什么.

同时,我看到@ APZ的评论,我修改了我的脚本,用–delete-delay替换–delete-after.我现在又跑了.将获得更新.

更新3

添加更多交换和使用–delete-delay而不是–delete-after似乎已经成功了.常规的cron作业似乎也正常运行.

另外,我已经按照this article在发送计算机上使用sudo运行rsync.这也删除了转移过程中的Permission denied(13)警告.

感谢大家的帮助.

P.S.:参与本问答的每个人都给出了有用的建议.不幸的是,我只能标出一个正确的答案.

作为指针,我建议在服务器端查看rsync日志.另外,尝试rysnc的详细模式:

-v,–verbose This option increases the amount of information you are given during the transfer. By default,rsync works silently. A single -v will give you information about what files are being transferred and a brief summary at the end. Two -v options will give you information on what files are being skipped and slightly more information at the end. More than two -v options should only be used if you are debugging rsync.

ubuntu – 在通过SSH备份期间,Rsync进程突然被杀死的更多相关文章

  1. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  2. ios – Xcode Server 4.0 git从构建触发脚本推送

    我为一个托管在github上的项目安装了一个XcodeBot.我按照步骤和设置机器人来使用我现有的SSH密钥.验证成功,项目结算和建立.然后,我在预触发器操作中添加了一个shell脚本,它增加了plist中的版本,将其标记,并将该更改提交到github.但是当我尝试从shell脚本执行gitpush时,我得到:–推送到git@github.com:spex-app/spex-ios.git权限被拒

  3. ios – Xcode上传错误:无法打开ssh会话. (16)

    注意:我们终于上传了该应用程序,但是我们并没有真正解决这个问题,所以如果有人可以分享一些有关这个问题的宝贵意见或经验,我将不胜感激.我也检查了以下2个类似的问题,但这些没有帮助:>Erroruploadingiosapplicationtoitunesconnect“failedtoopensshsession(16)”>AppStoresubmission/distributionerror“f

  4. swift详解之二十--------在xcode中使用git管理源代码,将代码提交到github

    在xcode中使用git管理源代码,将代码提交到github本文记录一下如何在Xcode中使用Git作为源代码控制工具,以及如何将本地的Git仓库和远程Github上的仓库集成起来,虽然这章节和swift没有关系,但我还是放在这里。对详细的git操作可以看在Xcode中使用Git进行源码控制讲得很详细,很好。将xcode与github链接起来。

  5. 使用OSC生成SSH

    在很多项目开始前,大家可能都愿意把项目或者自己封装的代码放到github上,但是有一点蛋疼的就是如果要在github上新建私有的项目是要收费的,所以我选择了OSC,这个不仅可以吧github的项目转接到OSC上,而且OSC还可新建私有的项目。好了,牛逼不吹了,开始下面部署SSH的步骤。第一步访问git.oschina.net,注册自己的账号第二步访问如下界面第三步打开终端第四步查看公钥第五步第六步如果你看到了这个WelcometoGit@OSC,yourname!标识,就说明成功了。

  6. SSH网上商城之使用ajax完成用户名是否存在异步校验

    这篇文章主要介绍了SSH网上商城之使用ajax完成用户名是否存在异步校验的相关资料,需要的朋友可以参考下

  7. PyCharm如何配置SSH和SFTP连接远程服务器

    这篇文章主要介绍了PyCharm如何配置SSH和SFTP连接远程服务器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. python paramiko连接ssh实现命令

    这篇文章主要为大家介绍了python paramiko连接ssh实现的命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. 搭建SSH时的思考和遇到的几个问题的解决方法

    SSH流行很久了,一直看到官方文档和网上都在讲如何整合SSH,讨论各种整合的优缺点。本次所用版本为:Struts1.3.9Spring2.5Hiberante3.2开发工具和环境为:Eclipse3.3MyEclipse6.0JBoss4.2Tomcat用SSH时,我们的架构自然就会分成三层,即表现层,逻辑层和持久层,按照MartinFlower的指导思想,耦合越少越好,下层为上层提供服务,这也是Rod开发Spring的指导思想之一,所以我首先想到的就是如何减少到最低的耦合。

  10. Java框架SSH结合Easyui控件实现省市县三级联动示例解析

    这篇文章主要为大家详细介绍了Java框架SSH结合Easyui控件实现省市县三级联动示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部