【问题标题】:Perl script to check remote server for processPerl 脚本检查远程服务器的进程
【发布时间】:2012-10-28 00:59:32
【问题描述】:

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

脚本的功能是从一个由 :: 分隔的文本文件中读取服务器列表,登录到服务器,检查 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";                                                                         
    }                                                                                                    
}

我做错了什么?

谢谢。

【问题讨论】:

  • 看起来你记录的是 SSH 端口,而不是运行 TSQL 的端口。
  • 你好弗兰克,这是我用 bash 编写的一个较大脚本的一部分,正在转换为 perl;有很多检查只能通过 ssh 完成并在远程服务器上运行,我对所有其他端口进行了防火墙。

标签: linux perl scripting


【解决方案1】:

试试

our ($name, $ip, $port) = split('::', $line);

【讨论】:

  • 你好泡沫堆,如果我使用 '' "" 或 // 作为分隔符真的有区别吗?只是问一下,因为我对 perl 还是有点陌生​​。
【解决方案2】:

放入一些打印调试代码,以便您可以看到正在运行的命令。所以改变:

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

【讨论】:

  • 你好Peter,我不知道qq,以后肯定会用这个!感谢您指出我的代码中出现了新的一行;确实如此。我已经修复了代码,可以说它现在可以工作了。
【解决方案3】:
my $issue = `ssh -t root@"$_[0]" -p$"_[1]" 'ps axco command | grep -i mysql'`;

看看

-p$"_[1]"

应该是

-p "$_[1]"

【讨论】:

  • 你好 ugexe,你是正确的,错字是我的,我在粘贴代码后手动重新添加了引号。谢谢你的回复!
【解决方案4】:

您的代码稍作修改

...
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
...

【讨论】:

  • 您好 Rohit,感谢您付出的努力,是的,您是正确的;我并没有扼杀线条,而是在最后添加了一条新线条。谢谢你的代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多