J'ai un script d'applications qui obtient constamment cette erreur. À en juger par l'e-mail de notification, il semble que le délai soit de 5 minutes. Est-ce que quelqu'un sait s'il existe un moyen de prolonger ce délai? Ou peut-être existe-t-il un moyen d'appeler à nouveau le script d'applications et de reprendre là où il s'était arrêté? Toute aide est appréciée.
Une chose que vous pourriez faire (cela dépend bien sûr de ce que vous essayez d'accomplir) est:
Ce n'est pas une solution universelle, si vous publiez votre code, les gens pourraient mieux vous aider.
Voici un extrait de code simplifié d'un script que j'utilise tous les jours:
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
}
REMARQUE # 1: La variable REASONABLE_TIME_TO_WAIT
Doit être suffisamment grande pour que le nouveau déclencheur se déclenche. (Je l'ai fixé à 5 minutes mais je pense que ça pourrait être moins que ça).
NOTE # 2: doSomeWork()
doit être une fonction qui s'exécute relativement rapidement (je dirais moins de 1 minute).
REMARQUE # 3: Google a déprécié Script Properties
, et introduit Properties Service
à sa place. La fonction a été modifiée en conséquence.
Essayez également de minimiser le nombre d'appels aux services Google. Par exemple, si vous souhaitez modifier une plage de cellules dans les feuilles de calcul, ne lisez pas chacune, ne la mutez pas et ne la stockez pas. Au lieu de cela, lisez toute la plage (en utilisant Range.getValues () ) en mémoire, mutez-la et stockez-la en une seule fois (en utilisant Range.setValues () ).
Cela devrait vous faire économiser beaucoup de temps d'exécution.
la réponse d'Anton Soradoi semble OK mais pensez à utiliser Cache Service au lieu de stocker les données dans une feuille temporaire .
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;
}
Notez également qu'en avril 2014, la limitation de l'exécution du script est de 6 minutes .
Utilisateurs G Suite Business/Enterprise/Education et Early Access:
Depuis août 2018, la durée d'exécution maximale du script est désormais fixée à 30 minutes pour ces utilisateurs.
J'ai utilisé ScriptDB pour enregistrer ma place tout en traitant une grande quantité d'informations en boucle. Le script peut/dépasse la limite de 5 minutes. En mettant à jour ScriptDb lors de chaque exécution, le script peut lire l'état de la base de données et reprendre là où il s'était arrêté jusqu'à ce que tout le traitement soit terminé. Essayez cette stratégie et je pense que vous serez satisfait des résultats.
Si vous utilisez l'édition G Suite Business ou Enterprise. Vous pouvez enregistrer un accès anticipé pour App Maker après avoir activé App Maker, l'exécution de votre script augmentera la durée d'exécution de 6 minutes à 30 minutes :)
Plus de détails sur le créateur d'applications Cliquez ici