0

セットアップしたスクリプトに少し問題があります。少し背景:

スクリプトの機能は、::で区切られたテキストファイル内のサーバーのリストから読み取り、サーバーにログオンし、mysqlが実行されていることを確認して、レポートを返すことです。ファイルは、各行が次のように構成されています。サーバー名::IPアドレス::ポート番号

私が抱えている問題は、perlがコード内にある関数にフィードしているIPアドレスを連結しようとしていると思うことです。誰かが私を正しい方向に向けることができますか?

#!/usr/bin/perl                                                                                           

use strict;
use warnings;

open(FH, '<', 'serverlist_test') or error("Cannot open file , ($!)");
while (my $line = <FH>) {
    our ($name, $ip, $port) = split(/::/, $line);
    my $version = &MySQL_check($ip, $port);                                                                                    
}
close FH;

sub MySQL_check {

    my $issue = `ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;
    print $issue;
    if ($issue =~ /mysql/) {                                                                             
      return "Mysql found"; 
    } else {                                                                                             
       return "Mysql not found";                                                                         
    }                                                                                                    
}

私は何が間違っているのですか?

ありがとうございました。

4

4 に答える 4

1
my $issue = `ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;

見る

-p$"_[1]"

これは

-p "$_[1]"
于 2012-11-07T22:13:45.573 に答える
1

いくつかの変更を加えたコード

...
while (my $line = <FH>) {
    chomp($line); #MOD -- remove newline
    our ($name, $ip, $port) = split("::", $line); #MOD -- change delimiter
...

sub MySQL_check {

    my $issue = `ssh -t root@"$_[0]" -p"$_[1]" 'ps axco command | grep -i mysql'`; #MOD -- fix misplaced double quotes
...
于 2012-11-08T02:55:02.070 に答える
0

試す

our ($name, $ip, $port) = split('::', $line);
于 2012-11-07T21:47:44.533 に答える
0

コマンドが実行されていることを確認できるように、印刷デバッグコードを挿入します。だから変更:

my $issue = `ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;

my $command = qq`ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;
warn "Going to run \"$command\""; # comment this out when your code works!
my $issue = `$command`;

これにより、コマンドの問題が報告されます。これは、ファイルから読み取った行がないためにほぼ確実に発生chompするため、ポート番号は実際にはファイルの\n後にあります。

于 2012-11-07T21:49:40.117 に答える