treedown’s Report

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

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

SCコマンドで別PCのサービスを監視してみる

前回<バッチファイルでWindowsサービス監視2023年版 - treedown’s Report>いったん完成して動作させているサービス監視バッチですが、気になった機能をもう一つご報告です。
次回はこれを入れてみようかなと思いました。

別のコンピュータから監視

scコマンドはネットワーク経由で別のPCで稼働するサービス監視も可能です。コマンドオプションに「オプションの <サーバー> は "\\サーバー名" の形式です。」という表記があったのを確認しました。

ただし前提条件として以前に実施した「ネットワーク経由で別PCのコンピュータの管理を実行する<https://blog.treedown.net/entry/2023/11/30/010000>」が必要になります。

scコマンドのヘルプを一部抜粋して記載します。

--------------------------------------------------------------

C:\Users\testuser>sc /?

説明:
        SC はサービス コントロール マネージャーやサービスと通信するために使用
        するコマンド ライン プログラムです。
使用法:
        sc <サーバー> [コマンド] [サービス名] <オプション 1> <オプション 2>...


        オプションの <サーバー> は "\\サーバー名" の形式です。
        「sc [コマンド]」と入力するとコマンドの詳細なヘルプが表示されます。

--------------------------------------------------------------

やってみる

サービスが起動しているサービス名と起動していないサービス名を指定して、状態の情報を収集してみます。

対象PCはクライアントHyper-Vが動作中なので、このサービスを対象にsc queryコマンドで状態を調査してみます。

この実行中の「Hyper-V Virtual Machine Management」サービス名は「vmms」と、

実行されていない「Hyper-V Time Synchronization Service」サービス名は「vmictimesync」

この二つを対象にsc queryコマンドを実行してみました。(※コンピュータ名は架空の"\\TCm92p-02"です。)

--------------------------------------------------------------

C:\Users\testuser>sc \\TCm92p-02 query vmms

SERVICE_NAME: vmms
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Users\testuser>sc \\TCm92p-02 query vmictimesync

SERVICE_NAME: vmictimesync
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

--------------------------------------------------------------

「STATE」に表記されるように、ネットワーク経由で別のPCを対象にしたscコマンドでも、サービスが実行状態である場合には「RUNNING」が表示されますし、サービスが停止状態のときは「STOPPED」で表示されることが分かります。

これを使うと…

使いドコロとしては、PC-AとPC-Bで相互にサービスを確認し、前回<バッチファイルでWindowsサービス監視2023年版 - treedown’s Report>のメールアラートを使って、OSレベルの問題が発生してサービスが応答しない状況でもアラートを送信することができる、と考えました。

いままでは、バッチの実行でサービス監視するコンピュータ1台で完結していたので、サービスの監視をしているコンピュータ自身(OSやハードウェアレベル)に問題が発生した場合にはアラートが発行されないケースもありました。(そもそも監視バッチを稼働させているタスクスケジューラはOSが起動していなければ動作しないため)

PC同士で相互にサービスを監視していれば、1台のOSレベルでの異常も相手のOSが正常動作していればアラートを送ることができます。ただ監視のために1台増やすというのもコストが必要になるということで、複数の常時起動Windowsがある場合には、という条件付きにはなりますがネットワーク経由で別PCのサービス監視をするというのは使えそうな感触は得ました。