首页 > 解决方案 > 为什么我的某些使用基于时间的触发器的 Google Apps 脚本“超出了限制”?

问题描述

在使用 Google Apps 脚本时,我的 G Suite 帐户似乎遇到了某种未指定的限制,但我不确定限制是多少和/或我应该如何调整我的工作流程。

我有一个 G Suite 商务版帐号。

我的“G Suite Developer Hub”中有大约 45 个相对简单的项目。

每个项目只有一个带有单一功能的小脚本,设置了一个基于时间的触发器,在每天凌晨 2:00 到 3:00 之间运行。

每个项目的存在只是为了将文件从一个文件夹移动到另一个文件夹,每天一次。每个项目存在于一对不同的文件夹中。

这是每个项目中一个小文件的模板,名为Code.gs.

var source_folder = DriveApp.getFolderById("xxxxxxxxsourceFolderIDxxxxxxxx")

var dest_folder = DriveApp.getFolderById("xxxxxxxxdestinationFolderIDxxxxxxxx")

function moveFiles() {

  var files = source_folder.getFiles();

  while (files.hasNext()) {

    var file = files.next();
    dest_folder.addFile(file);
    source_folder.removeFile(file);

  }
}

大多数触发器似乎工作得很好,但我最近收到了其中两个触发器失败的通知:

Start | Function | Error Message | Trigger | End
6/5/19 2:43 AM | moveFiles | Limit Exceeded: Drive. (line 13, file "Code") | time-based | 6/5/19 2:43 AM

第 13 行只是:source_folder.removeFile(file);

为什么会发生这种情况,我怎样才能确保我不会受到这种限制?

标签: google-apps-scripttriggersgoogle-drive-apigoogle-workspace

解决方案


您的 45 个触发器很可能在一段时间内执行了太多操作。有很多选择,

  1. 与其将所有触发器设置为同时运行,不如以某种方式分配它们,比如设置 9 个触发器在晚上 11 点运行,9 个触发器在上午 12 点运行,等等。
  2. 与其使用 1 个帐户来设置所有触发器,不如使用多个帐户。
  3. 而不是让 45 个脚本创建一个“主”脚本。也许您应该在每个文件夹/文件迭代中添加一个 Utilities.sleep(milliseconds) 。这是某种微调,取决于要移动的文件数量以及您设计主脚本的方式。

推荐阅读