• No : 26044
  • 公開日時 : 2016/12/02 17:34
  • 更新日時 : 2019/08/20 10:33
  • 印刷

【DataSpider Servista】 スケジュールトリガーのインターバル設定で指定した範囲を過ぎてもスクリプトが実行されていた

スケジュールトリガーのインターバル設定で[実行する時間の範囲を指定]して「起動制限」の[スクリプト実行中の場合、終了後実行する]を選択しています。
 
スクリプトの実行時間が予想以上に長くなって[終了時刻]を大きく超えたところ、[終了時刻]を過ぎた後でも次のスクリプトが実行されていました。
 
なぜ指定した範囲を過ぎてもスクリプトが実行されていたのでしょうか。
 
カテゴリー : 

回答

■仕様説明
 
インターバルスケジュールトリガーでは、スクリプトを実行する直前に次回にスクリプトを実行する「発火予定時刻」を、設定内容と現在時刻から計算しています。
 
このため、スクリプトに時間がかかって[終了時刻]を過ぎた場合でもスクリプトが実行されることがあります。
※実際の動作に関しては、下にある「■具体例」をご参照ください。
 
■注意事項
 
スクリプトの所要時間が実行する時間の範囲や実行間隔を大きく超過する場合、[終了時刻]を過ぎてもスクリプトが実行される状況が起きやすくなります。
 
実行する時間の範囲や実行間隔は、スクリプトの所要時間よりも長くなるように設定してください。
 
■具体例
 
以下の設定でインターバルスケジュールトリガーを運用していると仮定します。
  • 実行間隔 1時間
  • 実行時間 実行する時間の範囲を指定
  • 開始時刻 09:00
  • 終了時刻 12:00
  • 起動制限 スクリプト実行中の場合、終了後実行する
  • スクリプトの所要時間 処理件数が 0 件の場合は 1 分で終了するが、処理件数が多い場合は最大で 3 時間かかる
初回のスクリプト実行で、処理件数が多く、3 時間かかり、以降のスクリプト実行では処理件数が 0 なので 1 分で終了する場合、以下のような処理になります。
  • 09:00 より前
    開始時刻が 09:00 のため、発火予定時刻は 09:00 になります。
  • 09:00
    発火予定時刻(09:00)が現在日時と同時のため、スクリプトを実行します。
スクリプトを実行する前に、インターバルスケジュールトリガーは発火予定時刻(09:00)に実行間隔(1 時間)を足して、発火予定時刻を 10:00 に更新します。
(スクリプトの処理に 3 時間かかったとします)
  • 12:00
    発火予定時刻(10:00)が現在日時よりも過去のため、スクリプトを実行します。
スクリプトを実行する前に、インターバルスケジュールトリガーは発火予定時刻(10:00)に実行間隔(1 時間)を足して、発火予定時刻を 11:00 に更新します。
(スクリプトの処理に 1 分かかったとします)
  • 12:01
    発火予定時刻(11:00)が現在日時よりも過去のため、スクリプトを実行します。
スクリプトを実行する前に、インターバルスケジュールトリガーは発火予定時刻(11:00)に実行間隔(1 時間)を足して、発火予定時刻を 12:00 に更新します。
(スクリプトの処理に 1 分かかったとします)
  • 12:02
    発火予定時刻(12:00)が現在日時よりも過去のため、スクリプトを実行します。
スクリプトを実行する前に、インターバルスケジュールトリガーは発火予定時刻(12:00)に実行間隔(1 時間)を足して、発火予定時刻を 13:00 に更新します。
(スクリプトの処理に 1 分かかったとします)
  • 12:03
    発火予定時刻(13:00)が現在日時よりも未来のため、スクリプトを実行しません。
 
参考情報
 
・ ヘルプ[運用ツール] - [トリガー] - [スケジュールトリガー]
 
目的別で検索
トラブルシューティング