В настоящее время я пишу скрипт, который копирует папку и все ее подпапки и файлы очень большой директории из одного места на Google Диске в другой. Это используется для целей архивирования для компании, в которой я работаю.Тайм-аут выполнения для Google Apps Script
Моя проблема заключается в том, что размер и количество файла, который я пытаюсь заархивировать, является слишком большим, чтобы обрабатывать его в течение 5-минутного времени выполнения, данного Google. Я пытаюсь сохранить этот сценарий в качестве автономного веб-приложения, однако я рад продлить его по мере необходимости.
Моя вторая проблема заключается в том, что мне нужно, чтобы сценарий запускался снова и снова, пока папки не были скопированы, но как только он будет завершен, мне нужно его остановить. Я изначально собирался использовать триггеры, однако временные триггеры не подходят для задачи, которую я пытаюсь выполнить.
Короче говоря, мне нужно, чтобы мой сценарий выполнялся до завершения задачи, автоматически перезапускался и избегал ошибок времени выполнения.
Полный код приведен ниже.
//Global Variables
var classroomFolderName = "Classroom";
var archiveFolderName = "Archive";
function doGet(){
var classroomFolder = DriveApp.getFoldersByName(classroomFolderName).next();
var archiveFolder = DriveApp.getFoldersByName(archiveFolderName).next();
start(archiveFolder);
}
function getFolder(folderName){
var foldercount = 0;
//Selects all folders named exactally as parameter is given
var folder = DriveApp.getFoldersByName(folderName);
while (folder.hasNext()) {
var folders = folder.next();
foldercount++;
}
//Throws errors if number of folders != 1
if (foldercount < 1){
throw 1;
}
else if (foldercount > 1){
throw 2;
}
else{
return folder;
}
}
function start(archiveFolder) {
var sourceFolder = classroomFolderName;
var targetFolder = "New Archive";
var source = DriveApp.getFoldersByName(sourceFolder);
var target = archiveFolder.createFolder(targetFolder);
if (source.hasNext()) {
copyFolder(source.next(), target);
}
}
function copyFolder(source, target) {
var folders = source.getFolders();
var files = source.getFiles();
while(files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(), target);
}
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetFolder = target.createFolder(folderName);
copyFolder(subFolder, targetFolder);
}
}
Проверьте эти SO вопрос [превышено максимальное время выполнения в Google Apps Script] (HTTP: // StackOverflow .com/questions/7854573/above-maximum-execution-time-in-google-apps-script) и [Тайм-аут сценария приложения Google ~ 5 минут?] (http://stackoverflow.com/questions/14450819/google-app -script-timeout-5-minutes), если это может вам помочь. – KENdi