内容へ移動
fl8 Wiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
現在位置:
Dokuwiki.fl8.jp
»
13_javascript
»
03_gas
»
04 トリガーでExceeded maximum execution time対応
トレース:
•
compress
•
ifconfig
13_javascript:03_gas:04_exceeded_maximum_execution_time
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== 04 トリガーでExceeded maximum execution time対応 ====== GASでは6分以上スクリプトを実行できない。 そこで6分を超えそうなら、トリガーへ渡してトリガーから実行を繰り返す事で6分を超えて実行可能です。 [[13_javascript:03_gas:03_properties_service]] をカウントに利用する。 ===== トリガー制限 ===== トリガー制限にもあるので注意 処理の自動化のために時間等でトリガーを設定することも多いかと思いますが、このトリガーにも制限があります。 ^対象^無料アカウント^Google Workspace^ |トリガーの総実行時間|90 分 / 日|6 時間 / 日| |トリガー数|20 / ユーザー / スクリプト|20 / ユーザー / スクリプト| ===== サンプルスクリプト ===== これで10秒スリープしながら、30回スプレッドシートへ1行づつ文字を挿入していく 30秒を超えるようなら、countへ行数を保存しつつトリガーへ設定して実行させる。 設定したトリガーは5秒後に実行される。 <code> const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var scriptProperties = PropertiesService.getScriptProperties(); var MAX_RUNNING_TIME = 30000; //スクリプト実行時間(ミリ秒) 30秒 var REASONABLE_TIME_TO_WAIT = 5000; //トリガー実行までの時間 5秒後 function main(){ // トリガー制限にかからないようトリガーを削除 deletedTriggers(); // countを1にしておく scriptProperties.setProperty('count', 1); runProccess(); } function runProccess() { var count = scriptProperties.getProperty("count"); if(!count){ count = 1 } var startTime= (new Date()).getTime(); for(var i = Number(count); i <= 30; i++) { var currTime = (new Date()).getTime(); Logger.log('i '+i+' '+(currTime - startTime)); if(currTime - startTime >= MAX_RUNNING_TIME) { // 時間がなければトリガーセット setTrigger(currTime,i) break; }else{ var array = [['てすとメッセージ','実行行:' + i]]; sheet.getRange(i,1,1,2).setValues(array).setFontWeight("bold"); ss.toast(ii + "/30" + '実行中', '進行状況',0); Utilities.sleep(10000); // 時間があれば実行 if( i == 30){ sheet.getRange('A3').setValue('完了'); } } } } function setTrigger(time, triggerValue){ scriptProperties.setProperty('count', triggerValue); ScriptApp.newTrigger("runProccess") .timeBased() .at(new Date(time+REASONABLE_TIME_TO_WAIT)) .create(); Logger.log('トリガーセット完了'); ss.toast('続きの処理をトリガーで処理しています。', '進行状況', -1); } function deletedTriggers(){ var triggers = ScriptApp.getProjectTriggers(); Logger.log('トリガー数: ' + triggers.length); triggers.forEach(function(trigger){ // Logger.log(trigger.getHandlerFunction()); if(trigger.getHandlerFunction() == 'runProccess'){ ScriptApp.deleteTrigger(trigger) } }); } </code> {{tag>GAS}}
13_javascript/03_gas/04_exceeded_maximum_execution_time.txt
· 最終更新: 2023/03/11 03:23 by
matsui
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ