製品コラム
セイテクエンジニアのブログ 製品コラム ジョブのスクリプトではTIMEOUTコマンドを使用できない-Job Director FAQ(仮)
2024年08月28日配信
2024年08月28日更新
執筆者:セイ・テクノロジーズ エバンジェリスト
「Job Director R16」を使用する上での、よくあるお問い合わせ問い合わせについて、不定期で詳しく解説します。製品に関するよくある問い合わせについては、こちらでご確認ください。製品のサポート技術情報については、こちらで検索することができます。
問題のジョブはごく単純なコマンドを実行するもので、途中、一定時間待機するためにTIMEOUTコマンド(TIMEOUT /T 10)を使用しています。しかし、そのTIMEOUTコマンドを含むジョブのスクリプトが以下のエラーで異常終了してしまいます。TIMEOUTコマンドを置き換えることができる代替策はありませんか。
状態 ERROR
終了理由 exit( 1)で終了しました。
エラー出力結果 エラー: 入力のリダイレクトはサポートされていません。今すぐプロセスを終了します。
Windows標準のTIMEOUTコマンド(C:¥Windows¥System32¥Timeout.exe)は、一定の時間(秒)が経過するまで、またはユーザーが任意のキーを押すまで、待機するコマンドです。TIMEOUTコマンドはユーザーからの入力を待ち受けるため、対話的な実行ができないジョブのスクリプト内で使用すると、「エラー: 入力のリダイレクトはサポートされていません。今すぐプロセスを終了します。」で終了します(画面1)。このエラーは、キーの入力を無視する「/NOBREAK」パラメーターを付けたとしても回避することはできません。
画面1 ジョブのスクリプト内でTIMEOUTコマンドを使用したときのエラー
WindowsのTIMEOUTコマンドはジョブのスクリプトで使用できないため、Job Director(MG/SV)にはその代わりに使用できる「Sleep.exe」コマンドが付属しています。このコマンドの引数に秒数(0~最大2147483647秒)を指定することで、スクリプトの実行を一定時間待機させることができます。このコマンドについては、Job Directorの「コマンドリファレンス」(JD_コマンドリファレンス.pdf)の「3.22. sleep Windows版sleepコマンド」を参照してください。
画面2 Job Director MG/SVに付属のsleep.exeを使用する
TIMEOUTコマンドによる一定時間の待機はPingコマンドで代用することができます。Pingコマンドは、遅延なく応答がある場合、1秒ごとにICMPパケットを送信します。応答がない場合のタイムアウトの既定は4秒なので、確実に応答のあるlocalhost(または127.0.0.1または::1)に対して回数を指定して実行すれば、お望みの秒数だけ待機することができます。例えば、TIMEOUT /T 10は、ジョブのスクリプト内で次のコマンドラインを記述することで代用できます(画面3)
ping localhost -n 10
または
ping localhost -n 10 > null
画面3 TIMEOUTコマンドをPingコマンドで代用する
TIMEOUTコマンドの代わりに、Windows PowerShellのStart-Sleep(またはsleep)コマンドレットを使用することができます。例えば、TIMEOUT /T 10は、ジョブのスクリプト内で次のコマンドラインを記述することで代用できます(画面4)。
powershell.exe Start-Sleep -Seconds 10
または
powershell.exe sleep 10
画面4 TIMEOUTコマンドをWindows PowerShellのStart-Sleep(Sleep)コマンドレットで代用する
待機時間が秒単位ではなく、1分以上の分単位または時間、日単位である場合は、Job Directorの「時刻待ち合わせ」部品を利用できます。「時刻待ち合わせ」部品は、ジョブ開始時刻から0~9日後の指定した時刻(絶対時刻、00:00~23:59)または相対時刻(+00:00~+23:59)まで待機する部品オブジェクトです。例えば、0日後の「+00:01」と設定すれば、1分間の待機が可能です(画面5)。ただし、時刻待ち合わせの基準は、ジョブネットワーク(サブジョブネットワークの場合は親ジョブネットワーク)の開始時刻になることに注意してください。また、時刻待ち合わせ」部品では、1分未満、秒単位の待機はできません。
画面5 「時刻待ち合わせ」部品を使用して、ジョブネットワーク開始時刻から1分後に後続のジョブを開始する例。直前のジョブの終時刻了から1分後ではないことに注意(直前のジョブは1分以内に終了することを想定)