このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
13_javascript:03_gas:04_exceeded_maximum_execution_time [2023/03/11 01:45] – 作成 matsui | 13_javascript:03_gas:04_exceeded_maximum_execution_time [2023/03/11 03:23] (現在) – matsui | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== 04 トリガーでExceeded maximum execution timeを対応 ====== | + | ====== 04 トリガーでExceeded maximum execution time対応 ====== |
GASでは6分以上スクリプトを実行できない。 | GASでは6分以上スクリプトを実行できない。 | ||
そこで6分を超えそうなら、トリガーへ渡してトリガーから実行を繰り返す事で6分を超えて実行可能です。 | そこで6分を超えそうなら、トリガーへ渡してトリガーから実行を繰り返す事で6分を超えて実行可能です。 | ||
+ | [[13_javascript: | ||
+ | |||
+ | ===== トリガー制限 ===== | ||
+ | トリガー制限にもあるので注意 | ||
+ | 処理の自動化のために時間等でトリガーを設定することも多いかと思いますが、このトリガーにも制限があります。 | ||
+ | |||
+ | ^対象^無料アカウント^Google Workspace^ | ||
+ | |トリガーの総実行時間|90 分 / 日|6 時間 / 日| | ||
+ | |トリガー数|20 / ユーザー / スクリプト|20 / ユーザー / スクリプト| | ||
+ | |||
+ | |||
+ | ===== サンプルスクリプト ===== | ||
+ | |||
+ | これで10秒スリープしながら、30回スプレッドシートへ1行づつ文字を挿入していく | ||
+ | 30秒を超えるようなら、countへ行数を保存しつつトリガーへ設定して実行させる。 | ||
+ | 設定したトリガーは5秒後に実行される。 | ||
< | < | ||
+ | const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); | ||
+ | var scriptProperties = PropertiesService.getScriptProperties(); | ||
+ | var MAX_RUNNING_TIME = 30000; | ||
+ | var REASONABLE_TIME_TO_WAIT = 5000; // | ||
+ | |||
+ | function main(){ | ||
+ | // トリガー制限にかからないようトリガーを削除 | ||
+ | deletedTriggers(); | ||
+ | // countを1にしておく | ||
+ | scriptProperties.setProperty(' | ||
+ | runProccess(); | ||
+ | } | ||
+ | |||
+ | function runProccess() { | ||
+ | var count = scriptProperties.getProperty(" | ||
+ | if(!count){ count = 1 } | ||
+ | |||
+ | var startTime= (new Date()).getTime(); | ||
+ | for(var i = Number(count); | ||
+ | |||
+ | var currTime = (new Date()).getTime(); | ||
+ | Logger.log(' | ||
+ | if(currTime - startTime >= MAX_RUNNING_TIME) { | ||
+ | // 時間がなければトリガーセット | ||
+ | setTrigger(currTime, | ||
+ | break; | ||
+ | }else{ | ||
+ | var array = [[' | ||
+ | sheet.getRange(i, | ||
+ | ss.toast(ii + "/ | ||
+ | Utilities.sleep(10000); | ||
+ | // 時間があれば実行 | ||
+ | if( i == 30){ | ||
+ | sheet.getRange(' | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function setTrigger(time, | ||
+ | scriptProperties.setProperty(' | ||
+ | ScriptApp.newTrigger(" | ||
+ | .timeBased() | ||
+ | .at(new Date(time+REASONABLE_TIME_TO_WAIT)) | ||
+ | .create(); | ||
+ | Logger.log(' | ||
+ | ss.toast(' | ||
+ | } | ||
+ | |||
+ | function deletedTriggers(){ | ||
+ | var triggers = ScriptApp.getProjectTriggers(); | ||
+ | Logger.log(' | ||
+ | |||
+ | triggers.forEach(function(trigger){ | ||
+ | // Logger.log(trigger.getHandlerFunction()); | ||
+ | if(trigger.getHandlerFunction() == ' | ||
+ | ScriptApp.deleteTrigger(trigger) | ||
+ | } | ||
+ | }); | ||
+ | } | ||
</ | </ | ||