0

我设置的脚本有点问题。一点背景:

该脚本的功能是读取由 :: 分隔的文本文件中的服务器列表,登录到服务器,检查 mysql 是否正在运行并返回报告。该文件配置为每行具有: Servername::Ip address::port number

我遇到的问题是我认为 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 回答