web-dev-qa-db-ja.com

Windows Serverで起動するときにバッチスクリプトでネットワークを待機する方法

AzureのWindows Server 2012でTaskSchedulerの「システム起動時」を使用してバッチファイルを実行していますが、バッチの開始後20〜60秒間ネットワークがないことがわかりました。現在、私はpingで一定の待機を追加しましたが、ほとんどの場合機能しますが、機能しない場合もあります。ネットワークが利用可能になるまで待機するより堅牢な方法を提案できますか? (電子メールおよび/またはhttpリクエストを送信するため)

4
robert4

あなたはこれのためにバッチを使用することに熱心であるようですので、ここに行きます。 SO彼らは私よりも優れたスクリプターであるため、これを実行することをお勧めします。実際、( https://stackoverflow.com/questions/21245545/ping-test-using-bat-file-trouble-with-errorlevel )この方法でpingが実行されるかどうかのテストが他の方法よりも好ましい理由を説明します。

@echo off

set IPaddress=%%1  REM add IP address as command line argument or just static

:TEST
ping -n 1 %IPaddress% | find "TTL=" >nul
if errorlevel 1 (
    goto RETRY
) else (
    goto DOSTUFF
)

:RETRY
ping 127.0.0.1 -n 11>nul REM waits given amount of time, set to 10 seconds
goto TEST

:DOSTUFF
do stuff REM Do stuff
exit

基本的に、1秒間隔でpingを実行し、pingが成功したかどうかを確認します。もしそうなら、それはあなたがスクリプトしようとしていることを何でもします。

基本的なICMP接続を確認するIPアドレスをハードコードしなかったが、代わりにコマンドライン引数として追加した。または、ハードコーディングすることもできます。

私はこれをまったくテストしなかったので、構文を再確認することをお勧めします。

編集:実際の10秒の遅延を反映するために、ping値を11に変更しました。

「このネットワーク接続が利用可能な場合のみ開始する」オプションを使用します。 enter image description here

1
tombull89

スーパーユーザーでのこの回答 によると、スケジュールされたタスクを「ネットワークが利用可能」イベントにサブスクライブできます。
特定のネットワークをフィルタリングしない限り、機能するはずです。

0
Nitz