ubuntu – 在通过SSH备份期间,Rsync进程突然被杀死

前端之家收集整理的这篇文章主要介绍了ubuntu – 在通过SSH备份期间,Rsync进程突然被杀死前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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.

原文链接:https://www.f2er.com/ubuntu/347629.html

猜你在找的Ubuntu相关文章