我的 Google Apps 脚本正在迭代用户的 Google 云端硬盘文件,并将文件复制(有时将其移动到其他文件夹)。该脚本总是在几分钟后停止,并且日志中没有错误消息。
编者注:时间限制随着时间的推移而变化,并且“消费者”(免费)和“工作空间”(付费)帐户之间的时间限制可能有所不同,但截至 2022 年 12 月,大多数答案仍然有效。
我在一次运行中对数十个甚至有时数千个文件进行排序。
有什么设置或解决方法吗?
您可以做的一件事(这当然取决于您想要完成的任务)是:
- 将必要的信息(即循环计数器)存储在电子表格或另一个永久存储(即 ScriptProperties)中。
- 让您的脚本每五分钟左右终止一次。
- 设置时间驱动的触发器以每五分钟运行一次脚本(或使用以下命令以编程方式创建触发器)脚本服务 https://developers.google.com/apps-script/service_script).
- 每次运行时,从您使用过的永久存储中读取保存的数据,并从中断处继续运行脚本。
这不是一个一刀切的解决方案,如果您发布代码,人们将能够更好地帮助您。
以下是我每天使用的脚本的简化代码摘录:
function runMe() {
var startTime= (new Date()).getTime();
//do some work here
var scriptProperties = PropertiesService.getScriptProperties();
var startRow= scriptProperties.getProperty('start_row');
for(var ii = startRow; ii <= size; ii++) {
var currTime = (new Date()).getTime();
if(currTime - startTime >= MAX_RUNNING_TIME) {
scriptProperties.setProperty("start_row", ii);
ScriptApp.newTrigger("runMe")
.timeBased()
.at(new Date(currTime+REASONABLE_TIME_TO_WAIT))
.create();
break;
} else {
doSomeWork();
}
}
//do some more work here
}
注意#1:变量REASONABLE_TIME_TO_WAIT
应足够大以便新触发器能够触发。 (我将其设置为 5 分钟,但我认为可能会比这个更短)。
NOTE#2: doSomeWork()
必须是一个执行相对较快的函数(我想说不到 1 分钟)。
注意#3:Google 已弃用Script Properties https://developers.google.com/apps-script/reference/properties/script-properties,并介绍了Properties Service https://developers.google.com/apps-script/reference/properties/properties-service取而代之的是。该功能已进行相应修改。
注意#4:第二次调用该函数时,它将 for 循环的第 i 个值作为字符串。所以你必须将其转换为整数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)