NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

コマンドを任意の時間に実行するスクリプト

基本的な考え方として、ビジーウェイトによる非効率性に対処するため、スクリプト実行時間(TARGET_TIME)まで、sleep するようになっています。下記は、12:00 に SnapMirror の状態を確認する場合の例になります。

#!/usr/bin/perl
use Time::Local;
use POSIX 'strftime';
use IO::Handle;
$TARGET_TIME  = "12:00";
#------------------------------
if ( $#ARGV != 0) {
  print "usage : perl test.pl [SystemName]\n";
  exit;
}
$sHostname = $ARGV[0];
shift( @ARGV );
while(1) {
          $nTime  = strftime( "%Y/%m/%d %H:%M:%S" , localtime );
          $nTime2 = strftime( "%H:%M:%S %Y/%m/%d" , localtime );
          $nSec = strftime( "%S" , localtime );
          $nTime3 = strftime( "%H:%M" , localtime );
          $nDate = strftime( "%Y%m%d_%H%M%S" , localtime );
          print "$nTime  : target = $sHostname\n";
          if ($nTime3 eq $TARGET_TIME) {
                $str = "sshpass -p PASSWORD ssh -l root $sHostname snapmirror status > /tmp/${nDate}_$sHostname.log";
                print "command : $str\n";
                system( $str );
                last;
          }
          $n = 60 - $nSec;
          sleep( $n );
}
#------------------------------