Одна вещь, которую вы могли бы сделать (это, конечно, зависит от того, чего вы пытаетесь достичь), это:
- Храните необходимую информацию (например, счетчик циклов) в электронной таблице или другом постоянном хранилище (например, ScriptProperties).
- Ваш сценарий завершается каждые пять минут или около того.
- Установите управляемый по времени триггер для запуска скрипта каждые пять минут (или создайте триггер программно, используя Служба сценариев ).
- При каждом запуске читайте сохраненные данные из постоянного хранилища, которое вы использовали, и продолжайте запускать скрипт с того места, где он остановился.
Это не универсальное решение, если вы разместите свой код, и люди смогут вам лучше помочь.
Вот выдержка из упрощенного кода скрипта, который я использую каждый день:
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 минут, но я думаю, что это может быть меньше).
ПРИМЕЧАНИЕ # 2: doSomeWork()
должна быть функцией, которая выполняется относительно быстро (я бы сказал, менее 1 минуты).
ПРИМЕЧАНИЕ # 3: Google устарел Script Properties
и вместо него ввел Properties Service
. Функция была соответственно изменена.