2017-01-16 3 views
0

В настоящее время я пишу скрипт, который копирует папку и все ее подпапки и файлы очень большой директории из одного места на 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); 
    } 

} 
+0

Проверьте эти 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

ответ

Смежные вопросы