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-keygen
和 ssh-copy-id
)。这将完全消除对 expect 的需要(您可以改用 timeout
工具)。
我使用 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-keygen
和ssh-copy-id
)。这将完全消除对 expect 的需要(您可以改用timeout
工具)。