Die maximale Ausführungszeit in Google Apps Script wurde überschritten

Ich habe ein Apps-Skript, das ständig diesen Fehler verursacht. Nach der Benachrichtigungs-E-Mail zu urteilen, scheint das Zeitlimit 5 Minuten zu betragen. Weiß jemand, ob es eine Möglichkeit gibt, dieses Zeitlimit zu verlängern? Oder gibt es vielleicht eine Möglichkeit, das Apps Script erneut aufzurufen, und es dort abzurufen, wo es aufgehört hat? Jede Hilfe wird geschätzt.

   

Eine Sache, die Sie tun könnten (das hängt natürlich davon ab, was Sie erreichen wollen), ist:

  1. Speichern Sie die notwendigen Informationen (zB wie ein Schleifenzähler) in einer Tabelle oder einem anderen permanenten Speicher (zB ScriptProperties).
  2. Lass dein Skript alle fünf Minuten oder so enden.
  3. Richten Sie einen zeitgesteuerten Trigger ein, um das Skript alle fünf Minuten auszuführen (oder erstellen Sie mithilfe des Script-Diensts einen Trigger programmgesteuert).
  4. Lesen Sie bei jedem Lauf die gespeicherten Daten aus dem permanenten Speicher, den Sie verwendet haben, und führen Sie das Skript weiterhin dort aus, wo es unterbrochen wurde.

Dies ist keine universelle Lösung. Wenn Sie Ihren Code posten, wären die Leute in der Lage, Sie besser zu unterstützen.

Hier ist ein vereinfachter Code-Auszug aus einem Skript, das ich jeden Tag benutze:

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 } 

HINWEIS # 1: Die Variable REASONABLE_TIME_TO_WAIT sollte groß genug sein, damit der neue Trigger ausgetriggers wird. (Ich habe es auf 5 Minuten eingestellt, aber ich denke, es könnte weniger sein).

HINWEIS # 2: doSomeWork() muss eine function sein, die relativ schnell ausgeführt wird (ich würde sagen, weniger als 1 Minute).

Hinweis # 3: Google hat Script Properties veraltet und stattdessen den Properties Service eingeführt. Die function wurde entsprechend geändert.

Versuchen Sie außerdem, die Anzahl der Anrufe bei Google-Diensten zu minimieren. Wenn Sie beispielsweise einen Zellbereich in den Tabellen ändern möchten, lesen Sie nicht jeden einzelnen, mutieren Sie ihn und speichern Sie ihn zurück. Lesen Sie stattdessen den gesamten Bereich (mit Range.getValues ​​() ) in den Speicher, mutieren Sie ihn und speichern Sie ihn alle gleichzeitig (mit Range.setValues ​​() ).

Dies sollte Ihnen eine Menge Ausführungszeit sparen.

Anton Soradois Antwort scheint in Ordnung zu sein, aber überlegen Sie sich, Cache Service zu verwenden, anstatt Daten in einem temporären Blatt zu speichern.

  function getRssFeed() { var cache = CacheService.getPublicCache(); var cached = cache.get("rss-feed-contents"); if (cached != null) { return cached; } var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml"); // takes 20 seconds var contents = result.getContentText(); cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes return contents; } 

Beachten Sie auch, dass ab April 2014 die Skriptlaufzeit nur 6 Minuten beträgt .

Ich habe die ScriptDB verwendet, um meinen Platz zu speichern, während ich eine große Menge an Informationen in einer Schleife verarbeite. Das Skript kann die 5-Minuten-Grenze überschreiten. Durch Aktualisieren des ScriptDb während jedes Laufs kann das Skript den Status aus der database lesen und dort abholen, wo es aufgehört hat, bis die Verarbeitung abgeschlossen ist. Versuchen Sie diese Strategie und ich denke, Sie werden mit den Ergebnissen zufrieden sein.

Wenn Sie G Suite Business oder Enterprise Edition verwenden. Sie können einen frühzeitigen Zugriff für App Maker registrieren, nachdem der App Maker aktiviert hat, dass Ihre Skript Run Runtime die Laufzeit von 6 Minuten auf 30 Minuten erhöht 🙂

Weitere Informationen zum App Maker Klicken Sie hier