rsync:远程同步文件的创建时间(变为1970)与本地文件的创建时间不同

rsync: remote sync file‘s create-time(became to 1970) is different from local file's creation time

我使用 RSYNC 将文件夹从本地主机上传到远程主机。它由 CRONTAB 设置为计划任务。上传时出现错误:一个文件(在文件夹中)传输失败,创建时间变成了1970/01/01(明显不正确)。此外,文件夹(在远程主机上)的创建时间不同于本地文件夹(在本地主机上)的创建时间。前者比后者晚几分钟。 这是我的代码(由crontab设置为计划任务):

time=$(date "+%Y-%m-%d")
echo $time
count_tmp=0
while [ $count_tmp -le 4 ]
do

/usr/bin/expect <<-EOF
spawn rsync -avzP -e "ssh -p xxx" --bwlimit=5000 $time xxx@xxxx:/xxx/xxx
set timeout 300
expect {
 "*yes/no" { send "yes\r"; exp_continue }
 "*password:" { send "changeme\n" }

}
send "exit\r"
expect eof
EOF

if [ $? -ne 0 ]
then
 let count_tmp++
 echo "failed, try again"
 sleep 1h
else
   echo "success"
   break
fi
done

以下是: 2020-08-01是文件夹,xxx-2020-08-01.txt是里面的文件。 records_history_information-2020-08-01.txt 正在上传,但出现错误,进程中断。

-远程主机文件夹的 (2020-08-01) 信息

drwxr-xr-x 2 hgd hgd 4096 Aug  1 20:25 2020-08-01

-远程主机文件的(records_history_information-2020-08-01.txt)信息

-rw-rw-rw- 1 hgd hgd  58182912 Jan  1  1970 records_history_information-2020-08-01.txt

-本地主机文件夹的 (2020-08-01) 信息

drwxr-xr-x 2 root root       4096 Aug  1 20:16 2020-08-01

-本地主机文件的(records_history_information-2020-08-01.txt)信息

-rw-rw-rw- 1 mysql mysql 727396510 Aug  1 20:16 records_history_information-2020-08-01.txt

本地crontab日志(显示records_history_information-2020-08-01.txt上传中断,接下来是2020-08-02)

2020-08-01/records_history_information-2020-08-01.txt
2020-08-0292   8%   13.28MB/s    0:00:48

我有两个问题:

-records_history_information-2020-08-01.txt创建时间不正确(1970)是上传失败导致的吗?

-主机永远不会关闭(两者),我已经设置了 5 次重新上传。为什么它关闭上传?会不会是rsync超时导致的?还是其他原因?

1970 年 1 月 1 日是 Unix“纪元”(即时间零)的开始,因此在出现故障的情况下看到这一点听起来是合理的。使用 -t-a 重新运行 rsync 应该可以修复它。

您的期望脚本有 5 分钟超时。如果没有足够的时间来完成传输,或者如果有一个您没有预料到的额外用户提示,那么是的,它会中断上传。

我建议您为“expect eof”使用更高的超时值。

其他一些注意事项:

  • “发送退出”似乎没有必要。
  • “yes/no”看起来不是个好主意;如果 ssh 不知道主机,那么就会有问题,您可能不应该盲目连接。
  • 在脚本中嵌入密码并不理想;您应该设置一个用于自动登录的 ssh 密钥(请参阅 ssh-keygenssh-copy-id)。这将完全消除对 expect 的需要(您可以改用 timeout 工具)。