2017-01-16 3 views
0

Ich schreibe gerade ein Skript, das einen Ordner sowie alle Unterordner und Dateien eines sehr großen Verzeichnisses von einem Speicherort in Google Drive auf einen anderen kopiert. Dies wird zu Archivierungszwecken für das Unternehmen verwendet, bei dem ich beschäftigt bin.Ausführungstimeout für Google Apps-Skript

Mein Problem ist, dass die Größe und Menge der Datei, die ich archivieren möchte, in der 5-minütigen Ausführungszeit, die Google angibt, zu groß ist. Ich versuche, dieses Skript als eigenständige Web-App zu behalten, aber ich freue mich darauf, es bei Bedarf weiter zu geben.

Mein zweites Problem ist, dass ich das Skript immer und immer wieder ausführen muss, bis die Ordner kopiert wurden, aber sobald es fertig ist, brauche ich es zu stoppen. Ich wollte ursprünglich Trigger verwenden, aber zeitbasierte Auslöser sind für die Aufgabe, die ich zu erfüllen versuche, ungeeignet.

Kurz gesagt, ich brauche mein Skript ausgeführt werden, bis die Aufgabe abgeschlossen ist, automatisch neu gestartet, und die Vermeidung von Laufzeitfehlern.

Der vollständige Code ist unten enthalten.

//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

Schauen Sie sich diese Frage SO [Überschritten maximale Ausführungszeit in Google Apps Script] (http einen Wert finden: // Stackoverflow .com/questions/7854573/maximum-maximum-execution-time-in-google-apps-script) und [Google app script timeout ~ 5 minuten?] (http://stackoverflow.com/questions/14450819/google-app -Script-Timeout-5 Minuten), wenn es Ihnen helfen kann. – KENdi

Antwort