2013-02-20 66 views
0

是它允许链时间在谷歌应用程序脚本触发这样的:谷歌Apps脚本:不可靠的时候触发

function doGet(e){ //first invocation by user, HTTP GET 
    if (e == null || e.parameters == null) { 
     return ContentService.createTextOutput("EMPTY"); 
    } 

    saveGetParametersForUser(Session.getUser().getEmail(), e); 

    //trigger 10 seconds 
    var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create(); 

} 


function timeDrivenEvent() { //runs until there are some data in ScriptDB 
    Logger.log("INVOKED AT " + new Date()); 

    removeAllPreviousTriggers(); //removes old time triggers 

    var somedata = loadTaskData({email: "" + Session.getUser().getEmail()}); 
    var remainingData = processTaskData(somedata); 

    if(remainingData == null){ 
     return; //we are finished here 
    } 

    removePreviousAndSaveRemainingTaskData(remainingData); 

    var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create(); 

} 
  • 用户的doGet()
  • 直到将所有数据处理脚本首先调用以10秒的间隔自行调用(例如2分钟的处理,10秒没有任何反应,然后再处理2分钟...)
  • 处理数据的大小是〜几千字节,处理时间通常需要1-2分钟。

我发生了什么有时脚本中断,数据未完全处理!我没有收到任何电子邮件警报,没有任何记录或执行记录 - 一切都很正常。

我开始想,也许10秒相当快的启动脚本方法,但API毕竟在它了...

任何想法? 这是唯一可能的解决方案,因为Google App脚本运行时间不会超过5-6分钟(请参阅配额),因此如何将大型任务分成较小的部分。

+0

如何一个传递你会每天使用多少总处理时间? – 2013-02-20 04:59:04

+0

在开发过程中,我每天至少运行20次脚本...这不会超过1小时/天,这是免费的谷歌应用程序的限制。我们有谷歌应用程序的业务(更大的配额)。 – 2013-02-20 05:09:36

+2

我担心你会碰到每个脚本的20个Trigger配额。您提供的代码会重复创建触发器。所以也许你应该删除以前的触发器?那会是'ScriptApp.getProjectTriggers()'。检查处理函数是否是“timeDrivenEvent”,如果它使用'ScriptApp.deleteTrigger()',则删除它。 – 2013-02-20 06:19:34

回答

0

拥有一个周期性时间触发器的效果很好,因为它在评论中被推荐。

我只是想知道为什么时间触发链接没有效果!我做了什么原则打破了谷歌应用程序脚本没有那样。

文档:https://developers.google.com/apps-script/class_clocktriggerbuilder

方法everyMinutes提供设置触发器被创建火上的间隔中的分钟数必须是1,5,10,15或30。

+0

感谢您的更新,很高兴知道它有帮助。 – 2013-02-21 06:05:12

+0

这个新的解决方案带来了新的问题。我将不得不使用一些锁,因为脚本有时可以同时运行两次(例如,当处理时间大于1分钟时,脚本的第二个实例开始运行,因为我使用everyMinute(1).Google App脚本带来了很多 – 2013-02-22 01:19:20

+0

您可以使用存储在ScriptProperties中的标记,只有在处理了当前块的情况下才允许脚本运行,或者您可以使用5分钟的触发器来确保不会出现“重叠” – 2013-02-22 06:59:05