ゆっきーのブログ

実践的なシステム設計開発、アプリケーションフレームワーク開発、トラブルシューティング、 後輩育成のためのブログ。その他、キャンプ、トレッキング・登山やレジャー等。

1. システムエンジニアリング bat_vbs windows

疎通確認用pingツール

投稿日:2018年11月24日 更新日:

新人君たちと本番環境の構築作業でデータセンターに入り。
構築したサーバから、既存の重要なサーバへの疎通確認を行うために、pingを何度も入力する予定とのこと。
作業時間の短縮や間違いの低減のために、この確認作業を纏めて行うツール(DOSバッチ)を作成した。
作業効率化のためにこのような自動化ができないかを考えてほしい、だとか、自動化を過信すると逆に大きなミス(ツールのバグで疎通確認できていなかった等)になる場合もあるので、作業効率と確実性のバランスをとることも大事と伝えた。

ツール概要

説明

  • 複数のサーバに対して纏めてping疎通確認する。
  • 入力となるテキストファイルに記載されたサーバに対してpingを実行する。各pingの実行結果をログファイルに出力する。
  • このツールを共有フォルダに配置し、各サーバからこの共有フォルダ(\\で始まるパス: UNC)を開いて、本ツールを実行する想定です。ログファイルの場所がバラバラにならないよう、実行結果のログは本ツールと同じ共有フォルダ上に出力する設計になっています。
  • pingの実行仕様は、実行回数: 1、タイムアウト: 1,000[ms]とする。

ダウンロード

下記からダウンロードできます。

フォルダ構成

  • ping_all.bat: 本ツール本体
  • ping_cmd.bat: 本ツールで使用するバッチ
  • hosts.txt: 疎通確認対象となるサーバの一覧を定義するファイル
  • log: ログファイルを格納するフォルダ
    • ping_all_[HOSTNAME].log: ログファイル、[HOSTNAME]は実行時サーバ名

実行方法

エクスプローラでping_all.batをダブルクリックする。
または、コマンドプロンプトから実行する。

入力ファイル仕様

hosts.txtファイルに対象ホストを1行1つ定義する。

localhost
127.0.0.1

192.168.1.1

出力ファイル仕様

ping_all_[HOSTNAME].logに次のように確認結果を出力する。
成功の場合は”OK”、失敗の場合は”**NG**”と出力する。(“NG”だと、ぱっと見、”OK”と誤認する可能性があるので、”*”を付けて桁数を変えることで目立つようにした。)

[19:14:19.22]: START 

localhost: OK
127.0.0.1: OK
192.168.1.1: **NG**

[19:14:20.21]: END 

ツールの実装内容

ツールのソースコードは次の通り。

hosts.txtの内容を1行づつ読み取っり、その内容を引数として、後述のping_cmd.batを実行する。
ファイル内容を1行づつ読み取るためにfor文を使った。空白を含むパス上のファイルも対象とできるよう”for /F %%f (“%DEST_HOST_FILE%”)”(30行目)と書いたが、空白で区切られた複数のトークンと認識されてしまった。これを回避するために、”for /F %%f in (‘type “%DEST_HOST_FILE%”‘)”とした。

@echo off
rem 
rem 複数のサーバにpingを送信する。
rem 実行結果をログファイルに出力する。
rem 
rem 【説明】
rem ・ネットワークパス(UNC)から実行できるよう絶対パス指定にしています。
rem   (「UNC パスはサポートされません~」は無視して問題なし)
rem ・ping送信対象を定義したhosts.txtファイルを同じフォルダ配置してください。
rem 
set MYNAME=%~n0
set BASE_DIR=%~dp0
set DEST_HOST_FILE=%BASE_DIR%hosts.txt
set PING_CMD=%BASE_DIR%ping_cmd.bat
set LOG_DIR=%BASE_DIR%log\
set LOG_FILE=%LOG_DIR%%MYNAME%_%COMPUTERNAME%.log

rem ログフォルダ作成
mkdir "%LOG_DIR%" > nul 2>&1

rem 開始メッセージ出力
echo 宛先ホストファイル : %DEST_HOST_FILE%
echo 実行結果の出力先   : %LOG_FILE%

rem 開始メッセージをログ出力
echo [%time%]: START > "%LOG_FILE%"
echo.>> "%LOG_FILE%"

rem 入力ファイルに定義されたホストに対してpingを実行
for /F %%f in ('type "%DEST_HOST_FILE%"') do (
	call "%PING_CMD%" %%f >> "%LOG_FILE%" 2>&1
)

rem 終了メッセージをログ出力
echo.>> "%LOG_FILE%"
echo [%time%]: END >> "%LOG_FILE%"

pause

引数で指定されたホストに対してpingを実行する。
実行時の出力に”(0% の損失)”が含まれている場合、成功と見なす。%は予約語なので%%とエスケープする必要がある。

@echo off
rem 
rem pingを実行する。
rem 

rem OKと見なす文字列
set OK_STR=(0%% の損失)

rem pingコマンドパス
set PING_CMD=ping

rem pingコマンドオプション
rem -n: 回数、-w タイムアウト[ms]
set PING_OPT=-n 1 
set PING_OPT=%PING_OPT% -w 1000
set DEST=%1

rem 引数チェック
if "%DEST%"=="" (
	echo 送信先を指定してください。 1>&2
	exit /b 1
)

rem ping実行
%PING_CMD% %PING_OPT% %DEST% | find "%OK_STR%" > nul 2>&1
if %ERRORLEVEL% == 0 (
	set RESULT=0
	set RESULT_DISP=OK
) else (
	set RESULT=1
	set RESULT_DISP=**NG**
)

echo %DEST%: %RESULT_DISP%
exit /b %RESULT%

-1. システムエンジニアリング, bat_vbs, windows

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

マスタデータ生成ツール

開発や結合試験、本番環境等で使用するマスタデータをExcelで管理することがあります。 そのようなExcelファイルからDBに登録するためのインサート文を作成するために、いつもツールに悩むので作成して …

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

EAP7のインストールとパッチ適用

仕事でredhat社のEnterprise Application Server7(EAP7)を扱うことが多いので備忘録として記載します。 なお、このサイトでWebアプリを公開したいと考えていますが、 …

開発環境のJBoss EAP7にリモートアクセス

開発中のものを他者に見せたり、問題が発生している開発者の開発物を参照するために、eclipse上で起動しているEAP7のWebアプリに別のPCからアクセスしたい場合があります。 このための手順を記載し …

パスワード情報の保管方式の比較

Webアプリの開発でパスワードを使ったユーザ認証を設計・実装する機会がよくある。 後輩への説明や勉強会ネタとして、この辺の話を纏めてみようと思う。 概要 オンラインバンキングやネットショッピングのサイ …