【Google Apps Script】5分の壁の向こう側

Google Apps Scriptで処理を実行していて
[起動時間の最大値を超えました]
なんてメッセージが出たので対応方法をメモメモ

どうやら5分以上かかる処理をやっちゃダメよ!
ってことらしいのだ。。。
まぁ無限ループとかされてもねってことで
しょうがないのかな

function main(){
  var startTime   = new Date();

  //トリガーを削除
  var allTriggers = ScriptApp.getProjectTriggers();
  for(var i=0; i < allTriggers.length; i++) {
      ScriptApp.deleteTrigger(allTriggers[i]);
  }

  // 適当なループ
  for (var i in xxxxxxx) {

    // 処理時間に5分以上経過している場合は、一度処理を終わらせ、再度実行させる
    var nowtime = new Date();
    var nowdiff = parseFloat((nowtime.getTime()-startTime.getTime())/(1000*60));

    if(nowdiff >= 4.8){
      ScriptApp.newTrigger("main")
               .timeBased()
               .everyMinutes(1)
               .create();
      return;
    }
  }
}

5分(この例だと正確には4分48秒)以上かかってたら
自分の関数を、1分間隔のトリガーにセットしてから処理終了。

で、再度始まったときにそのトリガーを削除するようにすればOK!

途中までの結果を残しておきたい場合は、
シートとかユーザプロパティやらになんか書き残しておこう!

コメント

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