Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash rsync在通过ssh传输后挂起_Bash_Ssh_Webserver_Backup_Rsync - Fatal编程技术网

Bash rsync在通过ssh传输后挂起

Bash rsync在通过ssh传输后挂起,bash,ssh,webserver,backup,rsync,Bash,Ssh,Webserver,Backup,Rsync,我编写了一个bash脚本,将文件从web服务器(HostGator)备份到运行FreeBSD的本地文件服务器 我使用rsync over ssh(从文件服务器)连接到远程服务器(我已经设置了预共享的rsa密钥)。当我运行以下行开始同步时,文件似乎都很好地进入,但命令永远不会返回,脚本永远挂起: /usr/local/bin/rsync -az --chown=root:admin --chmod=ugo=rwX --exclude ".inode_lock" --rsh='ssh -p2222'

我编写了一个bash脚本,将文件从web服务器(HostGator)备份到运行FreeBSD的本地文件服务器

我使用rsync over ssh(从文件服务器)连接到远程服务器(我已经设置了预共享的rsa密钥)。当我运行以下行开始同步时,文件似乎都很好地进入,但命令永远不会返回,脚本永远挂起:

/usr/local/bin/rsync -az --chown=root:admin --chmod=ugo=rwX --exclude ".inode_lock" --rsh='ssh -p2222' admin@domain.com:/home/admin/ '/mnt/blah/blah/LocalBackup/' >> "./Logs/Backup Log.txt"
等待几分钟后,当我按Ctrl+C停止命令时,我弹出以下错误消息:

^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(636) [generator=3.1.2]
rsync error: received SIGUSR1 (code 19) at main.c(1429) [receiver=3.1.2]
即使双方已经同步并且只是检查更改,这种情况仍然会发生

我不知道该怎么解决这个问题。我确实尝试过移除rsync的-v开关,因为一些用户报告这会导致挂起,但我没有看到任何区别

编辑

还有一个补充说明。我今天再次运行脚本以继续进行故障排除。如果在脚本挂起后让脚本继续运行而不干扰它,最终我会收到以下消息:

rsync: connection unexpectedly closed (2984632408 bytes received so far) [receiv    er]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receive    r=3.1.2]
rsync: connection unexpectedly closed (8689703 bytes received so far) [generator    ]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.2]
然后返回到命令提示符。我想这可能是由于远程服务器端超时造成的,但不确定。但我仍然不确定为什么会发生绞刑

更新

我做了一个额外的测试,并将rsync传输限制在一个特定的测试文件夹中,其中包含一些示例文件和子文件夹,而不是获取整个主目录。当我这样做时,它能够成功地完成转换并适当地退出。因此,在服务器的主目录中,似乎一定有某个文件或文件夹导致了问题。是否存在rsync无法传输文件的特定情况?我看到它在尝试同步写锁定的文件时抛出错误,并出现“权限被拒绝”错误,但即使是这些文件也没有阻止它继续。有什么想法吗

另外,我要连接的远程服务器位于共享主机帐户上,因此我没有根访问权限。我不知道这是否会引起一些问题

更新2

因此,我研究了rsync命令,并添加了几个命令行参数--progress和--stats(以及--verbose),以便更好地了解它的死角。我现在注意到,当运行该命令时,它挂起的位置是从服务器下载的一个非常大的文件。但是现在,随着进度的报告(我现在让它直接输出到终端,而不是一个文件),它似乎进展得很顺利,到目前为止还没有出现任何问题


我现在开始怀疑ssh连接是否超时或是由于不活动造成的?特别是在最初的情况下,在大文件传输过程中,函数长时间没有输出任何内容。这是一种可能的情况吗?如果是这样,我该如何保持连接打开?(我不确定将--progress更新直接打印到日志文件是不是一个好主意)。

好的,我想出来了。显然,HostGator的共享服务器默认设置了30-45分钟的SSH超时限制。由于运行rsync花费的时间超过了该限制,因此正在关闭上的连接。我打电话给他们的技术支持人员,他们为我的服务器增加了它。

如果按Ctrl-D而不是Ctrl-C会发生什么?我刚刚尝试过,但如果文件的增长/更改速度超过了rsynced的速度,或者存在嵌套装载(我特别想到NFS),它没有任何效果(脚本仍然挂起)这是无法达到或不可靠的,这两者都可能导致这种情况。这是基于您的测试而产生的,限制了您同步的内容。您可以在进程看起来处于挂起状态时对其进行扫描,以查看它是否正在传递数据。这是一种有趣的可能性。但从我现在看到的情况来看,似乎这可能是一个超时问题(尽管不确定)。我不熟悉strace命令,您对我可以使用该命令来排除故障的参数有什么建议吗?在另一个终端中,使用
ps
找出
rsync
进程的PID,然后使用类似
strace-vvvf-s 4096-p PID
(替换数字)的命令。你应该看到很多输出。如果数据是通过
rsync
传输的,您应该在
read()
write()
调用中看到表示该数据的字节。