【バッチファイル】パソコンの時間が同期されているか確認する方法。秒単位まで指定可能。

スポンサーリンク




作業を自動化する

サーバの運用ではシステム時刻がズレていないか確認する必要があります。

必要な事ですが毎回手動でチェックするのは大変です。

この記事は、

  • 時刻同期を頻繁に行うのが面倒なので自動化したい
  • パソコンの時間が合っているのかワンクリックで確認したい

こんな方に向けて時刻同期をスマートに行う方法を説明します。

 

スポンサーリンク

時刻同期の確認方法

サーバの時刻は、基準となるサーバを指定してそのサーバに合わせています。
この仕組みをNTPと言います。
ということなので時刻同期が正しいかは、この2つで判断します。

  • 最後に時刻同期した一定期間以内
  • 基準となるサーバが設定されている

時刻の確認方法はコントロールパネルにある「日付と時刻」を開きます。
インターネット時刻のタブから確認できます。
今回はCUIで確認するのでコマンドプロンプトから「w32tm /query /status」のコマンドを実行して確認します。

GUIはウインドウやアイコンなどで確認する表示形式
CUIは文字で確認する表示形式

NTPコマンドの結果

C:\Users\xxxx>w32tm /query /status

閏インジケーター: 3 (同期未実行)
階層: 0 (未指定)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0131985s
ルート分散: 9.3992167s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 2021/11/19 1:07:00
ソース: ntp.nict.jp,0x9
ポーリング間隔: 10 (1024s)

いろいろと情報はありますが、まず見る所は2つです。

・最終正常同期時刻
→これが1ヶ月とかだと明らかにダメだとわかります。大体1日以内がOKでしょう。

・ソース
→ここは基準となるサーバが設定されている事を確認します。

どこの誰だかわからない時刻と同期することになってしまいます。
なので設定が消えちゃったりしていないか確認したいです。

見るポイントは2箇所ですが、ぱっと見てそれが正しいのかわかりません。
そこでバッチを使います。

バッチ実行結果

早速ですがバッチの結果はこんな感じになります。

NTP○
続行するには何かキーを押してください . . .

NTP○と簡潔に表示させることで誰が見てもOKな事がわかります。(スバラシイ!)

チェックしているのは2つでそれぞれsetで条件を書いています。

・同期時刻が指定した許容範囲内になっている

set CHECKTIME=%NOW:~,13%

ここの13の数字は「2021/11/19 1:07:00」の左から13番目までを表しています。
どの程度の精度を求めているかによりますが”日”単位で合っていれば良いと考えます。

早見表は下記です。
年(4) 月(7) 日(10) 時(13) 分(16) 秒(19)

今回はここまでですが、許容判定は3時間以内などまだまだ改良の余地はあると思います。

 

・ソース情報が指定したものと一致している

set SOURCE=ソース: ntp.nict.jp,0x9

「ntp.nict.jp,0x9」は参照しているNTPサーバに書き換えてください。

スポンサーリンク

バッチの内容

下記コードをメモ帳に貼り付けて「時刻確認.bat」というファイル名でデスクトップへ保存してください。
ダブルクリックで実行できます。

@echo off
rem ※※※※1.条件の指定※※※※
rem NTP起動コマンド「net start w32time」
rem NTP停止コマンド「net stop w32time」
rem NTP同期コマンド「w32tm /resync」
set filename=NTP結果.log
set COMMAND=w32tm /query /status
set NOW=%date% %time%
set SYNCTIME=最終正常同期時刻

rem どこまでチェックするか数字で指定 年(4) 月(7) 日(10) 時(13) 分(16) 秒(19)
set CHECKTIME=%NOW:~,12%

rem NTPサーバを指定
set SOURCE=ソース: ntp.nict.jp,0x9

rem 成功時のメッセージ
set OKMESSAGE=NTP○

rem 失敗時のメッセージ
set NGMESSAGE=NTP×(個別に結果を確認してください。)

rem ※※※※2.コマンド実行とファイル出力※※※※
echo %COMMAND% > %filename%
%COMMAND% >> %filename%

rem ※※※※3.ファイル読み込みと条件確認※※※※
for /f "delims=" %%i in (%filename%) do (
rem ソースをチェック
echo %%i | find "%SOURCE%" >NUL
if not errorlevel 1 (
set source-result=OK
)
rem 最終同期時刻をチェック
echo %%i | find "%SYNCTIME%" >NUL
if not errorlevel 1 (
echo %%i | find "%CHECKTIME%" >NUL
if not errorlevel 1 (
set time-result=OK
)
)
)
rem ※※※※4.結果出力※※※※
rem ソースと時刻の両方がOKか確認
echo %source-result% | find "OK" > NUL
if not errorlevel 1 (
echo %time-result% | find "OK" > NUL
if not errorlevel 1 (
echo %OKMESSAGE%
goto ENDBAT
)
)
echo %NGMESSAGE%
:ENDBAT
pause

ファイルを保存するときの文字コードは「ANSI」にしてください。
ソースの「ntp.nict.jp」は適当にネットにあったNTPサーバを参照させています。

まとめ

事前に基準になるサーバを指定したバッチファイルを作成しておくことで、確認したい時にバッチをダブルクリックすれば○×で表示させることができます。
コマンドプロンプトを開いたり、コマンドを入力する必要もありません。
NTPの確認なんて何も考えずボタン一つで終わらせてやりましょう。

タイトルとURLをコピーしました