Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88268
  • 博文数量: 18
  • 博客积分: 360
  • 博客等级: 一等列兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 12:27
文章分类

全部博文(18)

文章存档

2014年(1)

2011年(17)

我的朋友

分类: PERL

2014-02-12 23:00:09

自己写的一个批量远程连接aix后检查lsdev里指定的磁盘类型和对应的lspath的数量,还挺好用,给大家分享一下,也请大家帮忙看看有什么地方需要改进的, 

要先装IO-Tty,Expect,Net::SSH::Expect
  1. [user@storage]$ cat chkPath
  2. #!/usr/bin/perl
  3. use Net::SSH::Expect;

  4. my $username = "user";
  5. my $password = "password";

  6. #检查的磁盘类型为3PAR,如果是其他类型的可以在这里修改,比如XP等
  7. my $disktype = "3PAR";

  8. my $pid = 1;

  9. die "please give a filename for the ip list!\n" if @ARGV ne 1;
  10. die "please give a true file for the ip list!\n" if ! -f $ARGV[0];

  11. my $outfile = "chkPath.out";
  12. my $date = `date`;
  13. print "the check path begin at $date";

  14. open OUT, ">$outfile";
  15. print OUT "$date";
  16. close OUT;

  17. #read the ip and start children process 读入ip后发起子进程chkClient去连接然后检查路径
  18. while (<>)
  19. {
  20.         my $hostname = $_;
  21.         chomp $hostname;
  22.         $pid = fork();
  23.         unless ( $pid )
  24.         {
  25.                 print "connect to $hostname  ...\n";
  26.                 &chkClient($hostname, $username, $password);
  27.                 exit;
  28.         }
  29.         sleep 6;
  30. }

  31. #end 父进程结束
  32. print "*"x30 . "\n";
  33. print "\nall the request is send, please wait and check out file!\n";
  34. print "*"x30 . "\n";

  35. #sub to check the ssh client 检查client的函数
  36. sub chkClient
  37. {
  38.         my ($ip, $user, $pass) = @_;
  39.         my $os = "NotAIX";
  40.         my $chk = "unknown";
  41.         my $disk, $path;
  42.         my $ssh = Net::SSH::Expect->new (
  43.                    host => "$ip",
  44.                    password=> "$pass" ,
  45.                    user => "$user",
  46.                    raw_pty => 1
  47.                );
  48.         $ssh->timeout(5);
  49.         $ssh->login(1) or die "can not login $!\n";
  50.         my $uname = $ssh->exec("uname");
  51.         if($uname =~ /AIX/is)
  52.         {
  53.                 $os = "AIX";
  54.                 $chk = "good";
  55.                 $ssh->send("lsdev -Ccdisk");
  56.                 $disk = $ssh->read_all(15);
  57.                 $ssh->send("lspath");
  58.                 $path = $ssh->read_all(15);
  59.         }

  60.         $ssh->close();

  61.         if ( $os eq "AIX" )
  62.         {
  63.                                 open IPOUT, ">$ip";
  64.                 print IPOUT "disk:\n$disk\n";
  65.                 print IPOUT "path:\n$path\n";
  66.                 close IPOUT;

  67.                 my @diskline = split /\n/,$disk;
  68.                 my @pathline = split /\n/,$path;
  69.                 for (@diskline)
  70.                 {
  71.                         if ( /(hdisk\d{1,3})\s.*$disktype.*/ )
  72.                         {
  73.                                 my $disk = $1;
  74.                                 my $val = grep(/Enabled\s+$disk\s/, @pathline);
  75.                                 if ( $val < 2 )
  76.                                 {
  77.                                         $chk = "error";
  78.                                 }
  79.                                 print "$ip: $disk has enabled path $val: $chk\n";
  80.                         }
  81.                 }
  82.         }

  83.         open OUT, ">>$outfile";
  84.         print OUT "$ip,$os,$chk\n";
  85.         close OUT;
  86.         print "*"x30;
  87.         print "check $ip complete: os: $os, path check:$chk\n";

  88. }
复制代码
PS:在linux安装IO-Tty非常顺利,但是在AIX上就不行,提示cc_r找不到,虽然查看是有c的编译环境的
用了一个其他的办法:
先安装gcc,然后下载perl源码,编译时指定gcc

# ./Configure -des -Dcc=gcc -Dprefix=/opt/perl5.16.2
# make
# make install

同样的方法进行安装IO-Tty Expect Net::SSH::Expect最后将脚本的第一行改成
#!/opt/perl5.16.2/bin/perl

如何运行:
编辑一个文本文件,每个ip一行,然后将文件名作为参数运行脚本,会在屏幕上输出每个ip对应的磁盘的path数
  1. connect to 10.190.41.117  ...
  2. connect to 10.200.157.179  ...
  3. connect to 10.200.157.139  ...
  4. connect to 10.200.150.109  ...
  5. connect to 10.200.134.99  ...
  6. connect to 10.200.122.9  ...
  7. 10.200.150.109: hdisk3 has enabled path 2: good
  8. 10.200.150.109: hdisk4 has enabled path 2: good
  9. 10.200.150.109: hdisk5 has enabled path 2: good
  10. 10.200.150.109: hdisk6 has enabled path 2: good
  11. 10.200.150.109: hdisk7 has enabled path 2: good
  12. 10.200.150.109: hdisk8 has enabled path 2: good
  13. 10.200.150.109: hdisk9 has enabled path 2: good
  14. 10.200.150.109: hdisk10 has enabled path 2: good
  15. 10.200.150.109: hdisk11 has enabled path 2: good
  16. 10.200.150.109: hdisk12 has enabled path 2: good
  17. 10.200.150.109: hdisk13 has enabled path 2: good
  18. 10.200.150.109: hdisk14 has enabled path 2: good
  19. 10.200.150.109: hdisk15 has enabled path 2: good
  20. ...
  21. 10.190.57.130: hdisk26 has enabled path 2: good
  22. 10.190.57.130: hdisk27 has enabled path 2: good
  23. ******************************check 10.190.57.130 complete: os: AIX, path check:good
  24. connect to 10.190.35.126  ...
  25. ******************************check 10.190.50.104 complete: os: AIX, path check:good
  26. ******************************check 10.190.34.94 complete: os: NotAIX, path check:unknown
  27. connect to 10.190.50.54  ...
  28. ******************************check 10.190.35.124 complete: os: NotAIX, path check:unknown
  29. connect to 10.190.57.34  ...
  30. 10.190.122.9: hdisk2 has enabled path 2: good
  31. 10.190.122.9: hdisk3 has enabled path 2: good
  32. 10.190.122.9: hdisk4 has enabled path 2: good
  33. 10.190.122.9: hdisk5 has enabled path 2: good
  34. 10.190.122.9: hdisk6 has enabled path 2: good
  35. 10.190.122.9: hdisk7 has enabled path 2: good
  36. 10.190.122.9: hdisk8 has enabled path 2: good
  37. ...
复制代码
完成后会在当前目录下生成chkPath.out
  1. [user@storage]$ cat chkPath.out
  2. Mon Feb 25 10:14:14 CST 2013
  3. 10.190.121.84,NotAIX,unknown
  4. 10.190.121.85,NotAIX,unknown
  5. 10.190.121.87,NotAIX,unknown
  6. 10.190.35.44,AIX,good
  7. 10.190.35.45,AIX,good
  8. 10.190.57.35,AIX,good
  9. 10.190.57.137,AIX,good
  10. 10.190.57.101,NotAIX,unknown
  11. ...
复制代码
同时如果是AIX系统的,还会生成以ip命名的单独的文件,记录lsdev和lspath的输出
  1. [jtwangxm@storage chkPath]$ cat 10.200.157.139
  2. disk:
  3. hdisk0  Available 07-08-00 SAS Disk Drive
  4. hdisk1  Available 07-08-00 SAS Disk Drive
  5. hdisk2  Available 02-00-02 3PAR InServ Virtual Volume
  6. hdisk3  Available 02-00-02 3PAR InServ Virtual Volume
  7. hdisk4  Available 02-00-02 3PAR InServ Virtual Volume
  8. hdisk5  Available 02-00-02 3PAR InServ Virtual Volume
  9. hdisk6  Available 02-00-02 3PAR InServ Virtual Volume
  10. hdisk7  Available 03-00-02 3PAR InServ Virtual Volume
  11. hdisk8  Available 03-00-02 3PAR InServ Virtual Volume
  12. hdisk9  Available 03-00-02 3PAR InServ Virtual Volume
  13. hdisk10 Available 03-00-02 3PAR InServ Virtual Volume
  14. hdisk11 Available 03-00-02 3PAR InServ Virtual Volume

  15. path:
  16. Enabled   hdisk0  sas0
  17. Enabled   hdisk1  sas0
  18. Available ses0    sas0
  19. Available ses1    sas0
  20. Available ses2    sas1
  21. Enabled   hdisk2  fscsi0
  22. Enabled   hdisk3  fscsi0
  23. Enabled   hdisk4  fscsi0
  24. Enabled   hdisk5  fscsi0
  25. Enabled   hdisk6  fscsi0
  26. Enabled   hdisk2  fscsi2
  27. Enabled   hdisk3  fscsi2
  28. Enabled   hdisk4  fscsi2
  29. Enabled   hdisk5  fscsi2
  30. ...
复制代码
阅读(4243) | 评论(0) | 转发(0) |
0

上一篇:香港核心系统-使用资源池的好处

下一篇:没有了

给主人留下些什么吧!~~