Telnetでログインサーバを再起動するスクリプトです。

Active Perl 5.8.8以降で動作します。ファイル名は「ログインサーバ再起動.pl」とでもしておいてください。

  1. ## Active Perl 5.8.8
  2. use strict;
  3. use warnings;
  4. use Net::Telnet;
  5. use Win32::Console;
  6. $|=1;
  7. my $console = new Win32::Console(STD_OUTPUT_HANDLE);
  8. my $defaultColor = $console->Attr;
  9. my $password = 'XXXXXXXXXX'; #ここにtelnetのパスワード
  10. my $telnet = new Net::Telnet(
  11. Host => '192.168.0.xx' #ここにログインサーバのIPアドレス
  12. , Port => 12344 #ここにログインサーバのtelnetポート番号
  13. , Timeout => 10
  14. );
  15. &message("Connect LoginServer.");
  16. $telnet->open;
  17. print $telnet->waitfor('/Password:/i');
  18. &echo("*****"); $telnet->print($password);
  19. my @m = $telnet->waitfor('/\n/'); print @m;
  20. die unless grep /Password Correct/i,@m;
  21. &send('restart');
  22. &flush;
  23. $telnet->close;
  24. &message("Disconnect.");
  25. exit 0;
  26. sub send {
  27. my ($msg) = @_;
  28. &flush;
  29. &echo($msg);
  30. $telnet->print($msg);
  31. }
  32. sub echo {
  33. $console->Attr(10);
  34. print @_,"\n";
  35. $console->Attr($defaultColor);
  36. }
  37. sub message {
  38. $console->Attr(11);
  39. print @_,"\n";
  40. $console->Attr($defaultColor);
  41. }
  42. sub flush {
  43. print @m if my @m = $telnet->getlines(Timeout => 3, Errmode => "return");
  44. }
こちらはシャットダウンするスクリプトです。

ファイル名は「ログインサーバシャットダウン.pl」とでもしておいてください。 -wオプションを指定すると、シャットダウンするまで待機します。

  1. ## Active Perl 5.8.8
  2. use strict;
  3. use warnings;
  4. use Net::Telnet;
  5. use Socket;
  6. use Win32::Console;
  7. $|=1;
  8. my $console = new Win32::Console(STD_OUTPUT_HANDLE);
  9. my $defaultColor = $console->Attr;
  10. my $wait = 0;
  11. foreach (@ARGV) {
  12. $wait = 1 if $_ eq '-w';
  13. $wait = 1 if $_ eq '/w';
  14. }
  15. my $password = 'XXXXXXXXXX'; #ここにtelnetのパスワード
  16. my $telnet = new Net::Telnet(
  17. Host => '192.168.0.xx' #ここにログインサーバのIPアドレス
  18. , Port => 12344 #ここにログインサーバのtelnetポート番号
  19. , Timeout => 10
  20. );
  21. &message("Connect LoginServer.");
  22. $telnet->open;
  23. print $telnet->waitfor('/Password:/i');
  24. &echo("*****"); $telnet->print($password);
  25. my @m = $telnet->waitfor('/\n/'); print @m;
  26. die unless grep /Password Correct/i,@m;
  27. &send('shutdown');
  28. &flush;
  29. $telnet->close;
  30. &message("Disconnect.");
  31. if ($wait) {
  32. while (&portCheck($telnet->host, 2106)) {print '.'; sleep 15}
  33. print "\n";
  34. }
  35. exit 0;
  36. sub portCheck {
  37. my ($host,$port) = @_;
  38. my $iaddr = inet_aton($host) or die;
  39. my $sock_addr = pack_sockaddr_in($port, $iaddr);
  40. return undef unless socket(SOCKET, PF_INET, SOCK_STREAM, 0);
  41. return undef unless connect(SOCKET, $sock_addr);
  42. close(SOCKET);
  43. 1;
  44. }
  45. sub send {
  46. my ($msg) = @_;
  47. &flush;
  48. &echo($msg);
  49. $telnet->print($msg);
  50. }
  51. sub echo {
  52. $console->Attr(10);
  53. print @_,"\n";
  54. $console->Attr($defaultColor);
  55. }
  56. sub message {
  57. $console->Attr(11);
  58. print @_,"\n";
  59. $console->Attr($defaultColor);
  60. }
  61. sub flush {
  62. print @m if my @m = $telnet->getlines(Timeout => 3, Errmode => "return");
  63. }