我在服务器 B 中编写了一个 perl 脚本,用于每隔一小时从服务器 A 到服务器 B 定期 scp 一个文件。 问题是有时 scp 由于服务器 B 上的某些问题而在特定时间失败。 我希望 scp 在发生这种情况时不断重试,直到成功为止。
脚本是:
$soc_scp=`scp -r user\@some_ip:\/home\/hbase\/hourly\/$datehr\.tar\.gz \/home\/hbase\/hourly\/$datehr\.tar\.gz`;
$echo_soc=`echo $?`;
if($echo_soc != 0)
{
$soc_scp=`scp -r user\@some_ip\:\/home\/hbase\/hourly\/$datehr\.tar\.gz \/home\/hbase\/hourly\/$datehr\.tar\.gz`;
}
出于安全原因,我没有指定 ip。非常感谢任何帮助。
最佳答案
尝试使用 system()
调用 scp
而不是反引号。这会捕获 scp
的退出状态而不是其输出。然后您可以检查它并在它不为零时重试。
sleep 1 while system "scp -r user\@some_ip:/home/hbase/hourly/$datehr.tar.gz /home/hbase/hourly/$datehr.tar.gz";
这将以 1 秒的间隔永远尝试 scp
直到成功。
将尝试次数限制为 10 次:
my $tries = 0;
while (system "scp -r user\@some_ip:/home/hbase/hourly/$datehr.tar.gz /home/hbase/hourly/$datehr.tar.gz") {
last if $tries++ > 10;
sleep 1;
}
关于perl - 如果尝试失败,如何使 scp 重试直到成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439073/