我有一个在服务器 B 中编写的 perl 脚本,每隔一小时就从服务器 A 到服务器 B 定期发送一个文件。每当发生这种情况时,都会重试直到成功。
脚本是:
$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`;
}
Run Code Online (Sandbox Code Playgroud)
出于安全原因,我没有指定 ip。任何帮助将不胜感激。
而不是反引号,请尝试scp使用system(). 这会捕获scp的退出状态而不是其输出。然后你可以检查它并重试它是否非零。
sleep 1 while system "scp -r user\@some_ip:/home/hbase/hourly/$datehr.tar.gz /home/hbase/hourly/$datehr.tar.gz";
Run Code Online (Sandbox Code Playgroud)
这将以scp1 秒的间隔永远尝试直到成功。
要将尝试次数限制为 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;
}
Run Code Online (Sandbox Code Playgroud)