【Python】pingでサーバーの死活監視を行う(subprocessモジュール)

2020.09.17 /

【Python】pingでサーバーの死活監視を行う(subprocessモジュール)

みなさんping使っていますか?
私は日々の業務で使わない日はない!と言えるくらい毎日使っています。

主な用途としては、各機器(サーバーやNAS、ルーターなど)がきちんと動いているかの確認で使用しています。
いわゆる死活監視ですね。

ほかには社員のパソコンがインターネットにつながらないといった場合やインターネット速度が遅いといったときにもpingコマンドを使いますね。

例えばインターネットにつながっているかどうかを確認したいときは、コマンドプロンプトを起動して、ping 8.8.8.8 -tと打ち込み実行します。

これはなにをしているかというと、8.8.8.8(GoogleのパブリックDNS)のアドレスに対して、疎通が取れているかの確認をしています。

ちょっと今回の記事内容から話が脱線してしまいましたが、本記事ではPythonによるpingコマンドでのサーバー死活監視について解説していきます。

サーバーやその他機器の死活監視は、社内SEだけでなく、IT業務にかかわる多くの方に関係する話だと思います。

本記事の対象者

本記事は以下に該当する方向けの内容となっています。
該当していなくても、興味があれば読んでください。

対象者

Python学習者(初級~中級者)

社内機器の保守・管理者

Pingによる死活監視を自動化したい人

自作でPythonによるプログラムを作りたい人

subprocessモジュールを使用

Pythonの標準モジュールであるsubprocessを使用してpingコマンドを実行します。
subprocess.runによってOSのpingコマンドを呼び出して使用します。

subprocessモジュールについては、以下記事に詳しい使い方を記載しているので、よく知らない方は、ぜひご確認ください。

サンプルプログラム

以下にsubprocessモジュールを使用した、ping死活監視プログラムを記します。

import subprocess
from ctypes import windll
hosts = ["192.168.0.100", "192.168.0.101", “192.168.0.54”]
while True:
    for host in hosts:
        result = subprocess.run(["ping.exe", host, "-n", "1"], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
        num = result.returncode
        if num == 1:
            user32 = windll.user32
            user32.MessageBoxW(0, "error", host, 0x00000040)
            break
    if num == 1:
        break

サンプルプログラムをコピペして、hostsには同じネットワーク内の機器IPアドレスを入れて起動してみてください。

機器が正常動作し続けているならば、エラーは表示されずにプログラムを止めるまでpingを出し続けます。

pingによる疎通が行われなかった場合、以下のようにエラー画面が表示され、プログラム自体がストップします。

pingエラー時のエラー表示

エラーの判定について

pingを対象機器に送信してそれらが動作しているかどうかの判定は、pingの返り値で行います。

サンプルプログラムではresult.returncodeで得た値をnumに代入しています。

umが0のとき、pingは正常終了していることを表し、1であればエラーが発生していることを表します。

*pingでタイムアウトエラーが発生した場合に1が返ってきます
*「宛先ホストに到達できません」のエラーでは、正常終了の0が返ってくるため注意が必要です

エラーが発生している場合(num==1のとき)、メッセージボックスを表示してどのIPアドレスの機器が動作していないかわかります。

pypingでのping死活監視

今までは標準モジュールのsubprocessを使用したping死活監視の方法を説明してきました。

実はそのほかにpypingを用いたping送信の方法があります。
PYPI – pyping

使用方法は非常に簡単なのですが、私の場合、pypingを正常に使うことができませんでした。

今後正常動作が確認できましたら、この記事にアップします。

まとめ

サンプルプログラムの使い方としては、exeファイルにして、起動時に自動的に実行するような形にするといいかと思います。

他にもいろいろな使い方がありますので、ぜひ考えて新しいプログラム作りに挑戦してみてください。