バッチファイルでFlexlmのネットワークライセンスをモニタリングする その1

ネットワークライセンスを使っている場合
「誰や!落としてないのは!」
「使い過ぎで親会社に怒られる!」
「割り当て分超過になりそう!」
「至急だから誰か開けて欲しい!」
といった、ライセンスのモニタリング、管理が必要になると思います。

解決策として、よく
「各自で気を付けましょう!」
と言われますが、それ、全然解決策になってないがな・・・

というわけで、Flexlmを使っている場合の、ネットワークライセンスをバッチファイル(MS-DOS)でモニタリングする方法を紹介します!バッチファイルなので、ほかのソフトとの使用に干渉することなく常時モニタリングが可能です。

「ふふっ、MS-DOSね・・・」
「Pythonじゃないのかよ」
と思った方。考え方は同じなので、Pythonでもトライしてみてください!

この「その1」の記事では、
・使用者と使用ライセンス数の情報の行を抜き出して
・DOS画面に表示
・情報は5秒おきに自動更新
までを説明します

しくみ

「lmstat」というコマンドでライセンスの使用状況が書き出せます。

確認するだけなら以下の内容をDOS画面に入力すれば「その時の使用状況の生データ」を見ることができます。バッチファイルを作成しなくても、下のような入力でも生データを見ることができます。

C:\Users\user>lmutil lmstat -a -c @サーバー名もしくはサーバーIPアドレス

「生データでは見づらいので、扱いやすいように作りましょう」というのがこの記事の趣旨です。「生データだけでいいや」という方は、必要なときに上記のコマンドを実行してください。

では始めましょう

先のコマンドで使用状態が表示されるのはわかりましたね。
でも、使用者とか、使用ライセンス数などの情報が、ぱっと見ただけではわかりづらいので、順を追って「ぱっと見てわかる」ようなものを作っていきましょう。

順序

  1. 「lmstat」で使用データを取得する

  2. そのデータをtxtファイルに保存する

  3. txtファイルから必要な情報を別のファイルに書き出す

  4. 書き出した情報をDOS画面に表示する

これで、常時モニタリングすることができます。

「説明なんか読んでるのはまどろっこしい!」という方は、さくっと一番下のコードをお使いください。

注意

・使うPCでFlexlmの設定済みが前提です(コマンドを使うので)
・同じサーバーで複数のソフトのライセンスを入れている場合は、すべてのソフトのライセンスが表示されます。その場合は、ソフト別の処理ができるように追記する必要があります(後述)

1. 「lmstat」で使用データを取得する

「さっき説明したじゃんかよ」と思ったあなた。
ここでは「バッチファイル」として使うために、基本的なところを少し補足して説明します。

バッチファイル(拡張子 bat)を作成するために、まず、テキストファイルを準備します。名前は「使用状況.txt」がよいでしょうか。

そこに、以下のように書き込みます。サーバーのIPアドレスは、ここでは仮に「255.255.2.255」としておきます。お使いのサーバーを調べて、記入してください。

@echo off
lmutil lmstat -a -c @255.255.2.255
pause

書き込んだら上書き保存して、一旦閉じてください。
そして、ファイル名の拡張子を「txt」→「bat」に変更し、その「使用状況.bat」をダブルクリックしてみてください。

画面に、使用状況の生データが表示されたことと思います。
「pause」というのは、処理の中断です。これがないと、表示が終わった瞬間に画面が閉じてしまうので(表示する、というところで処理が終わりなので)、処理終了まで「一旦停止」します。表示の最後にあるように、Enterを押すと閉じます。

それでは次に、生データでよいので、例えばある時間おきに自動更新されたら便利だと思いませんか?

では、batファイルを編集しましょう。編集の方法はいろいろあるのですが、新しいメモ帳(Notepad)を開いて、エクスプローラー上の「使用状況.bat」をドラッグ&ドロップしてみてください。すると、メモ帳で開いて編集することができます。

「5秒ごとにデータ更新する。前の表示画面はクリアする」という記述を追加しましょう。

@echo off

:START
lmutil lmstat -a -c @255.255.2.255
ping localhost -w 5000 > nul
CLS
GOTO START

解説
「:START」処理ループ名前です。先頭アルファベットで自由につけられます
「ping localhost -w 5000 > nul」スリープして5秒待つ、という処理です。localhostというのは自分のPCで、自分のPC自身への「問い合わせ」を「5秒(=5000ミリ秒)」行うということで、スリープ機能と同じになります。
「CLS」画面クリア(clear)です
「GOTO START」先頭の「:START」に戻ります

これで、5秒おきに画面が更新されます。終了したい場合は、DOS画面の右上の「×」で閉じてください。

2. そのデータをtxtファイルに保存する

表示されているデータは、まさに「表示されているだけ」なので、これを処理しようとしたら、どこかに内容を保存しないといけません

表示している内容をそっくりそのまま、batファイルがあるフォルダと同じフォルダにある「log1.txt」ファイルに書き込みましょう。あらかじめtxtファイルを作っておかなくて大丈夫です。

「lmutil lmstat -a -c @255.255.2.255」の後ろに「> log1.txt」を追加します。

@echo off

:START
lmutil lmstat -a -c @255.255.2.255 > log1.txt
ping localhost -w 5000 > nul
CLS
GOTO START

画面が真っ黒のままですが、これは、表示する処理から「ファイルに上書きする処理」に変更をしたので、表示がされなくなった、ということです。 log1.txtを開いて確認してみてください。また、5秒ごとに更新されるので、エクスプローラーに表示されるタイムスタンプが、5秒ごとに更新されるのがわかると思います。

3. txtファイルから必要な情報を別のファイルに書き出す

log1.txtに生データが書き出されたので、そこから必要な情報を取り出していきます。

取り出す方法は
・必要な行を見つける
・必要な部分の前後のスペースなどで切り出す

必要な行を見つける

で、必要な行って、どうやって判別するんでしょうか?
それは、人間が判別する方法と同じです。無意識のうちに見て判別していると思いますが、どうやって判別しているのか、よーく考えてみてください。

今回は「Total」という文字列を判別基準にします。これが入っている行には、ユーザー名、トータルのライセンス数、使用ライセンス数が入っています。

では、
・log1.txtファイルの中から
・「Total」が入っている行を
・画面に表示
してみましょう。

「ある文字列が入っている行を探す」というのは「FINDSTR」です。「Find Strings」だから、そのままでわかりやすいですよね。

@echo off

:START
lmutil lmstat -a -c @255.255.2.255 > log1.txt
FINDSTR "Total" log1.txt > log2.txt
ping localhost -w 5000 > nul
CLS
GOTO START

FINDSTR "Total" log1.txt > log2.txt
・「Total」の行を探します。
・ log1.txtの中から探します
・見つけた行をlog2.txtに書き込みます

4. 書き出した情報をDOS画面に表示する

log2.txtに書き出した内容を、DOS画面に表示します。
「さっきlog2.txtに書き出したからlog2.txtを見ればいいやん」
「log1.txtから直接DOS画面に書き出せばいいがな」
と考える方も多いかと思いますが、
・log2.txtは開いても、開けた時のデータのままで自動更新されません
・log1.txtから直接DOS画面に書き出すのはコードを書くのが手間。log2.txtを作ってから表示させる方がずっと簡単。
という理由で、この方法にしています。

下のコードが、今回の記事の内容の完成形です

@echo off

:START
lmutil lmstat -a -c @255.255.2.255 > log1.txt
FINDSTR "Total" log1.txt > log2.txt
TYPE log2.txt
ping localhost -w 5000 > nul
CLS
GOTO START

「TYPE テキストファイル名」で、テキストファイルの中身をそのまま画面に表示することができます。DOS画面が少しちらちらしていると思いますが、5秒おきに画面をクリアして表示しているためです。実際の運用のときには、5分おき(300000ミリ秒)くらいでもいいかと思います。

補足

ソフト別に処理したい、という場合は、「-f 」の引数を使用します。

lmutil lmstat -a -c @255.255.2.255 -f ソフトの名称 > log1.txt

(ソフトの名称は、それぞれで定義の名前があります)

では、これで「その1」終了です。

「全体で使っているライセンス数まで数えたい!」は、またこの次で!


面白いと思ったら、スキと一緒にぜひサポートお願いします。励みになります!