1

以下のコードを使用して ftp ノードに接続しています。ftp サーバーに接続できないか、ftp サーバーが応答していないかどうかを確認する方法を知りたいだけです。いずれにせよ、ftp server is ok or down という警告が表示されます。実際には、接続を確認するために通常の bash コードを埋め込みたいと考えています。

#!/bin/ksh  
ftp -nv <<EOF  
open xxx.xx.xx.xx  
user xxx xxxxxxxxx  
bye  
EOF  
4

3 に答える 3

1

ftp からの出力を grep するのはどうですか? アップロードが成功したときに、お使いのバージョンの ftp が何を返すかはわかりませんが、次のようなものです。

#!/bin/ksh

(
ftp -nv <<EOF
open xxx.xx.xx.xx
user xxx xxxxxxxxx
bye
EOF
) | grep -i "success"
if [[ "$?" -eq "0" ]]
then
        echo "FTP SUCCESS"
else
        echo "FTP FAIL"
fi

動作するはず..

于 2012-05-03T19:38:30.270 に答える
0

以前にも同じ問題があり、ftp コマンドの出力を確認して解決しました。それでも、かなり奇妙に思えたので、PERL を使用することにしました。

#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;

# open connection
my $ftp = Net::FTP->new("127.0.0.1");
if (! $ftp) {
    print "connection failed!";
    exit 1;
}

# in case you would need to test login too
# if (! $ftp->login("username", "password")) {
#    print "login failed!";
#    exit 2;
#}

$ftp->close();
exit 0;
于 2012-05-10T17:20:11.370 に答える
0

次のコマンドを使用して、ftp サーバーが使用可能かどうかを確認します。

sleep 1 | telnet ftp.example.com 21 2> /dev/null | grep -c 'FTP'

機能:

  • ポート 21 経由で ftp.example.com への接続を確立します (sftp にはポート 22 を使用します)。
  • 1 秒待ってから接続を終了します
  • "2> /dev/null" を使用した telnet からの "Connection closed by remote host" 応答を無視します。
  • アドレス指定されたサーバーからの応答に「FTP」が含まれている場合は「1」を返し、含まれていない場合は「0」を返します。

確認したい ftp サーバーからの予想されるウェルカム応答が、通常は次のような標準応答と異なる場合は、grep パターン 'FTP' を調整する必要がある場合があります。

   Trying 93.184.216.34...
   Connected to ftp.example.com.
   Escape character is '^]'.
   220 FTP Service
于 2019-11-05T10:15:11.390 に答える