google-apps-script - 为什么我的某些使用基于时间的触发器的 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);
为什么会发生这种情况,我怎样才能确保我不会受到这种限制?
解决方案
您的 45 个触发器很可能在一段时间内执行了太多操作。有很多选择,
- 与其将所有触发器设置为同时运行,不如以某种方式分配它们,比如设置 9 个触发器在晚上 11 点运行,9 个触发器在上午 12 点运行,等等。
- 与其使用 1 个帐户来设置所有触发器,不如使用多个帐户。
- 而不是让 45 个脚本创建一个“主”脚本。也许您应该在每个文件夹/文件迭代中添加一个 Utilities.sleep(milliseconds) 。这是某种微调,取决于要移动的文件数量以及您设计主脚本的方式。