【问题标题】:Verify copied file using Perl and SCP使用 Perl 和 SCP 验证复制的文件
【发布时间】:2013-07-17 21:14:45
【问题描述】:

如何使用 Perl SCP 在远程服务器上验证复制的文件,或者是否可以?下面是我正在使用的 Perl 命令。我不能使用SSH,所以我的选择有些有限。

$scpe->scp("/u02/oraclebackup/$tar_file","HOST:/u04/orabkup/oraclebackup/oemp/");

【问题讨论】:

  • 将远程复制回本地,cmp 本地可能不可靠...您可以在远程使用什么?而且,顺便说一句,有可能在scp 上得到一个“错误”的副本?
  • 我同意@jm666;除非网络上发生了什么事,否则您几乎总是可以保证传输成功。
  • 也许我有点太谨慎了。这将在 cron 中作为脚本运行,因此我将无法直接监控它,谁知道将来会出现什么样的网络问题。这是复制我们的数据库备份,所以我想在删除本地副本之前确保一切正常。
  • 我以为scp 有内置验证。
  • 我假设您使用的是Net::SCP::Expect。阅读perldoc的这一部分:“error_handler(sub ref) ...”

标签: perl scp verify


【解决方案1】:

好的,我找到了解决问题的方法,虽然它不直接验证副本,但如果在预期错误之外出现错误,它将停止脚本。这是我的代码:

$scpe->error_handler( \&scp_errors );
$scpe->scp( "/u02/oraclebackup/$tar_file",
    "HOST:/u04/orabkup/oraclebackup/oemp/" );

#Error trapping with exception for known harmless error
sub scp_errors {
    my $line = shift;

    if ( $line =~ /scp timed out while trying to connect to/ ) { 
        return (0);
    } else {
        return (1);
    }   
}

这似乎解决了我的两个问题。谢谢@chrsblck

【讨论】:

  • NP。另外,请注意,如果您不设置 error_handler,则会发生“简单的 'croak()' 调用”。如果你不熟悉Carp,我建议你改变它;)
猜你喜欢
  • 2013-11-25
  • 2016-11-02
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
相关资源
最近更新 更多