我设置的脚本有点问题。一点背景:
脚本的功能是从一个由::分隔的文本文件中的服务器列表中读取,登录到服务器,检查mysql是否正在运行并报告回来。配置文件使每行包含:Servername :: 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";
}
}
我做错了什么?
谢谢。
答案 0 :(得分:1)
my $issue = `ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;
看看
-p$"_[1]"
应该是
-p "$_[1]"
答案 1 :(得分: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
...
答案 2 :(得分:0)
尝试
our ($name, $ip, $port) = split('::', $line);
答案 3 :(得分: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
。