簡體   English   中英

Perl:SSH尾巴作為文件處理程序

[英]Perl: SSH Tail as File Handler

我正在創建一個日志解析器,該解析器能夠“寫入”日志。 該日志位於遠程主機上,因此我正在使用SSH和tail的組合創建文件處理程序。 以下工作效果很好,但是我確實對錯誤處理有一些疑問。

  • 如果用戶沒有在警報延遲到期之前輸入SSH連接的密碼,警報將開始觸發。 這將導致控制台被清除,因此不清楚是否需要輸入密碼。

  • 如果我輸入了錯誤的密碼,我仍然會啟用警報,導致屏幕清除等。

     Password: Password: Password: Permission denied (publickey,keyboard-interactive). 
  • 如果我提供了不存在的日志文件名,則代碼會繼續....

     tail: cannot open `/path_to_log/mylog.logXXXX' for reading: No such file or directory tail: no files remaining 

因此,我的問題是添加一些其他錯誤處理的最佳方法是什么。 或者,可以將File :: Tail模塊與SSH,telnet,rlogin等結合使用以提供相同的功能嗎?

謝謝!

    my $stopMsg = "Use CTRL+C to stop streaming at any time...\n";
    my $SSH = sprintf "ssh %s@%s tail -f %s | ", $user, $host, $log;

    printf "Log: %s\n", $log;
    printf "Handle: %s\n", $SSH;

    my $errMsg = sprintf "Couldn't establish SSH connection to \"%s\":",
                 $host;

    open my $pipe, $SSH or error( $errMsg );

    my $loadTime = time;

    printf $stopMsg;

    setSignalHandler( 'INT', sub{ stopAlarm( TRUE ); } );

    startAlarm( $delay,
                $interval,
                sub { system "clear"; $handler->( \@sysLogArr ); printf $stopMsg; } );

    while ( alarmHandlerSet() )
    {
        my $data = <$pipe>;

        next unless defined $data;

        mapSysLog( line   => $data,
                   arrRef => $logRef,
                   varRef => \%sysLogVars,
                   dbRef  => $dbRef );
    }

    clearSignalHandler( 'INT' );



sub error(@)
{
    my $color = "BOLD";
    $color = $CONFIG{errorPrinter} if ( $CONFIG{colorEnable} &&
                                        defined $CONFIG{errorPrinter} );

    color2PrinterRef( $color )->( "\nERROR: " );

    printf "%s\n", shift;
    printf "      %s\n", $_ foreach ( @_ );
    printf "Called From: %s::%d\n", (caller)[1], (caller)[2];
    printf "\n";

    exit EXIT_FAILURE;
}

請參閱Net :: SFTP :: Foreign附帶的sftp_tail.pl示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM