treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(3/3)Windowsサービス監視

お盆の長期休暇前のサービス監視バッチのご報告も、ようやく最後の仕上げに入ります。
前回まででようやく監視バッチが完成しました。

※本記事のバッチファイル等、ご利用の際は無保証・自己責任となります。

前回バッチの実行結果

これを実行すると、DHCP Clientサービスが起動している場合には、
-------c:\temp\svc.log--------
----------
2015/10/23
20:39
"Dhcp is running"
------------------------------
と記録されます。
これがDHCPサービスが停止してると、このような記録になります。
------------------------------
----------
2015/10/23
20:47
"start ServiceNAMR=Dhcp Service"
DHCP Client サービスを開始します.
DHCP Client サービスは正常に開始されました。

処理終了時刻
20:47
------------------------------
コマンド「net start "%SERVICE%"(DHCPサービス)」をリダイレクト(>>)してログファイル(%LOG%)に書出ししているので、net startコマンドのメッセージ出力もログファイルに記録されるようになります。
これだけ記録があれば、サービスが停止して再度起動した時間がある程度絞り込める、というものです。

あとはこのバッチファイルをタスクスケジューラにでも仕掛けて、1時間おきに実行などをしてやれば簡単な監視をしつつの、サービス自動起動とその記録をテキストファイルに残す、くらいの処理が自動化できます。
図:タスク登録の画面
※最上位の特権で実行する、を必ずチェックONしておきましょう。

f:id:treedown:20160731184753p:plain

ここまでで最低限は出来ました。
ですがこれだと、一つ問題が。

自力でlogrotate

放っておくと、ファイルに無限に記録を書き込むので、うっかり容量が増えてしまいファイルを開くのに難儀してしまいます。
これを防ぐために、ログファイルをログローテートのように分割(正確にはリネーム)しましょう。
----------------------------------------------
ファイル名:logrotate.bat
----------------------------------------------
@echo off
set LOGDir=C:\temp
set LOG=C:\temp\svc.log
set LOGFile=svc.log
set DATE="%date:~0,4%%date:~5,2%%date:~8,2%"
pushd "%LOGDir%"
rem echo %DATE%
SET COPYCMD=/Y
RENAME "%LOG%" %DATE%.txt
SET COPYCMD=
:end
popd
set LOGDir=
set LOG=
set LOGFile=
set DATE=
----------------------------------------------
これをタスクスケジューラで23:59に実行するように仕掛けておけば、指定の時刻にsvc.logログファイルが、YYYYMMDD.txtに変更されます。(0:00以降にしてしまうとログファイルの中身の日時とファイル名のdate表記が1日ずれるので注意してください。)
次のタスク実行からまた新たにsvc.logログファイルは生成されていきますので、1日1回YYYYMMDD.txtにサービスの監視状況が蓄積されていく、という動きを自動的にさせることができるようになります。

これであれば、数か月ファイルを放っておいたとしても、数十ファイルが蓄積されるだけで済むので、1ファイルが○MBになるよりはマシに取扱いができます。

欲を言えば、ファイルは乱雑になるので、本物のLinuxのlogrotateのように自動削除か1か月分のファイルを圧縮して.zipファイルにまとめてしまう、という動きにしたいですね。
欲を出すとキリがなくなってしまいますので、また別の機会に(気が向いたら)。