« 2004年04月 | メイン | 2004年08月 »

2004年05月16日

waitfor コマンド

Waitfor コマンドは Windows Server 2003 からの新しいコマンドで、シグナルを用いて複数のコンピュータの同期をとることができる。

構文1:シグナルを待つ
waitfor [/t TimeoutInSeconds] SignalName
SignalName という名のシグナルを待つ。シグナルが来るか、TimeoutInSeconds 秒経過するとこのコマンドは終了する。「/t TimeoutInSeconds」を省略したときは無期限にシグナルを待機し続ける。

構文2:シグナルを送る
waitfor [/s Computer [/u [Domain\]User [/p [Password]]]] /si SignalName
/s シグナルの送り先コンピュータ名またはIPを指定。規定値はローカルコンピュータ。
/si 送るシグナルの名前を指定。
/u 指定したユーザの権限で実行。 /p でパスワードも指定する。

これを使うと複数のバッチを同期させたり、複数のコンピュータの同期をバッチで行うことが可能である。
以前は同様のことをしたいときは、テンポラリのファイルを作成するなどして実現していたと聞く。 waitfor コマンドを使うと、ゴミも残らず、タイムアウトも指定できるなど利点が大きい。


例:
comp1 で foo1.bat, comp2 で foo2.bat を実行する。 foo2.bat の終了を foo1.bat の中で待つ。

##### comp1 / foo1.bat #####
echo comp2 の foo2.bat を待ちます。
waitfor foosignal
echo comp2 の foo2.bat は終わったようだ。

##### comp2 / foo2.bat #####
echo foo2.bat がスタートします。
////// 時間のかかる仕事 //////
waitfor /s comp1 /si foosignal

投稿者 augustus : 19:33 | コメント (0) | トラックバック

2004年05月02日

perl で web にアクセス (LWP::Simple)

perl から web にアクセスしたいときは LWP::Simple モジュールを使うのが便利だ。細かいところに手が届く感じではないが、実にシンプルに使うことができる。

実例を挙げると
use LWP::Simple;
$url="http://www.augustus.to/";
$data=get($url);
たったこれだけで web のドキュメントを取得できるのだから楽ちん、楽ちん。ただし、HTTP のレスポンスコードはとれない。
$code=getprint($url);
とすると $code にレスポンスコードが得られるが、$url の内容は標準出力に出力されてしまう。

細かいことをしたければ、LWP::UserAgent を使えば良いということなのだろう。

投稿者 augustus : 19:59 | コメント (0) | トラックバック