【问题标题】:Unknown Status in Google App Script Project ExecutionsGoogle App 脚本项目执行中的未知状态
【发布时间】:2019-05-09 00:48:43
【问题描述】:

我有一个现场工作人员填写并提交的 Google 表单。附加的 javascript 将表单的内容作为电子邮件发送给办公室中的每个人。

执行时间超长。一个报告了 19496 秒,此时 Gsuite 应在 5 分钟自动终止任何脚本。有些在 Google 应用脚本执行日志中具有“未知”状态和 0 秒。

Gsuite 配额是否已用完?我的脚本有错误吗?

运行脚本触发器的用户也会收到一封退回电子邮件,即使所有电子邮件都在通过,并且 Google 工作表正在正常接收来自 Google 表单的响应。

我尝试在顶部添加“if(e.values && !e.values[1]){return;}”和“return;”在底部。它似乎没有改变这个问题。

我编辑了下面的 google 应用脚本以删除电子邮件地址的真实列表,并缩短了报告。 Google 表单的目的是提供他们日常工作的真实摘要,而不仅仅是在电子邮件中“工作完成”。因此,他们改为填写 15 个问题的列表。

function myFunction(e){

// Set values for event "e" from Response form, each number being a column in the spreadsheet 
    var value1 = e.values[1];
    var value2 = e.values[2];
    var value3 = e.values[3];
    var value4 = e.values[4];
    var value5 = e.values[5];


  // Build subject and message for email that will be sent out
    var subject1 = value5 + " Job #" + value2 + " " + value3 + " Job Report Submitted " + value1 + "    -oOo-";
        var message_html = "<b>Date:</b> " + value1 + "<br>" + 
                   "<b>Job Number:</b> " + value2 + "<br>" +
                     "<b>Site Name:</b> " + value3 + "<br>" +
                     "<b>Client:</b> " + value4 + "<br>" +
                       "<b>Crew Chief:</b> " + value5 + "<br>";            


     // Send email to chief, of what the chief submitted through the Response form
     var chiefemail = "leo@email.com"; //setting leo email as the default - but this should not be used based on below 
     var chiefname  = "Leo E.";

     if (value5 == "Bryan N.") {
                                    chiefemail = "bryan@email.com";
                                    chiefname  = "Brian N";}
     else if (value5 == "Carl B.") {
                                    chiefemail = "carl@email.com";
                                    chiefname = "Carl B";
                                   }
     else if (value5 == "Clay W.") {
                                    chiefemail = "clay@email.com";
                                    chiefname = "Clay W";
                                     }
     else if (value5 == "Dakota P."){
                                    chiefemail = "dakota@email.com";
                                    chiefname = "Dakota P";
                                     }



 // Send emails to all office staff:     

   var EmailList = "brian@email.com," + chiefemail; 


       MailApp.sendEmail({
                          to: EmailList,
                          subject: subject1,
                          htmlBody: message_html,
                          name: chiefname,
                          replyTo: chiefemail
                           });


}

我希望脚本终止,并且我不想收到退回的电子邮件。救命!

【问题讨论】:

标签: google-apps-script google-sheets triggers google-forms


【解决方案1】:

我认为您可能会遇到我所说的虚假 onFormSubmit 触发器,我可能会尝试这样的事情。

function myFunction(e){
  if(e.values && e.values[1] && e.values[2] && e.values[3] && e.values[4] && e.values[5]) {
    var value1 = e.values[1];
    var value2 = e.values[2];
    var value3 = e.values[3];
    var value4 = e.values[4];
    var value5 = e.values[5];
    var subject1 = value5 + " Job #" + value2 + " " + value3 + " Job Report Submitted " + value1 + "    -oOo-";
    var message_html = "<b>Date:</b> " + value1 + "<br>" + 
      "<b>Job Number:</b> " + value2 + "<br>" +
        "<b>Site Name:</b> " + value3 + "<br>" +
          "<b>Client:</b> " + value4 + "<br>" +
            "<b>Crew Chief:</b> " + value5 + "<br>";            
    var chiefemail = "leo@email.com"; //setting leo email as the default - but this should not be used based on below 
    var chiefname  = "Leo E.";
    if (value5 == "Bryan N.") {
      chiefemail = "bryan@email.com";
      chiefname  = "Brian N";}
    else if (value5 == "Carl B.") {
      chiefemail = "carl@email.com";
      chiefname = "Carl B";
    }
    else if (value5 == "Clay W.") {
      chiefemail = "clay@email.com";
      chiefname = "Clay W";
    }
    else if (value5 == "Dakota P."){
      chiefemail = "dakota@email.com";
      chiefname = "Dakota P";
    }
    var EmailList = "brian@email.com," + chiefemail; 
    MailApp.sendEmail({
      to: EmailList,
      subject: subject1,
      htmlBody: message_html,
      name: chiefname,
      replyTo: chiefemail
    });
  }
}

您阅读了更多关于它的信息here。您还可以检查堆栈驱动程序日志以了解发生了什么。

【讨论】:

  • 我添加了这个,但它并没有解决我的问题。电子邮件在 1 秒后进入,但执行日志中的持续时间继续攀升,达到 55 秒。然后,它变为 0s,和未知状态。我也会尝试查看 Stackdriver 日志。谢谢。
  • 你试过stack driver logging吗?
  • 我最终复制了包含表,并重新添加了触发器。该脚本在来自实时表单副本的工作表副本中大约 0.1 秒后正确终止。我还在上面为虚假触发器添加了您的代码,因为那是在我的副本中触发的。谢谢库珀。
  • 你知道每次我发现有必要在另一张纸上开始一个项目。我无法解释问题是什么,但我发现它已经工作了几次,只要它有效,我就没有义务去理解它。-) 脚本似乎不是问题就运行长度而言。
【解决方案2】:

这对我来说最近也开始发生了。

根据执行记录,我的 goGet 和 goPost 执行似乎无限运行,即使服务器返回响应相当快。

我注意到只有当我以匿名用户身份在隐私浏览模式下运行 doGet 和 doPost 时才会发生这种情况。如果我已登录,则执行记录会针对该特定请求正常运行。

在过去的 1.5 年里,我维护着一个相当大的 Google Apps 脚本,其使用率相当高。这最近开始发生在我的脚本中。令人震惊的是,您的 SO 帖子也相当新。

将脚本复制到新脚本会暂时解决此问题,但最终新脚本也会开始出现此问题。一旦新脚本开始显示这些症状,代码的某些部分(特别是以编程方式打开和阅读 Google 表格)就会停止正常工作并开始出现故障。所以,我认为这个问题不仅仅是执行脚本中的视觉问题,它也对我在这个脚本中的其他代码的实际行为产生了负面影响。

【讨论】:

  • 我最近(最后一两天)遇到了同样的问题,有什么更新吗?
  • 我试着解决这个问题。禁用和重新启用似乎“解决”了这个问题。但是,每次我发布新版本时都需要这样做。希望这有助于解决问题。
  • 我的原始脚本没有再次出现故障,但是另一个脚本已经开始出现故障,执行时间很长。就像你说的,我希望这种行为能很快得到解决。
  • 昨天我收到了大约 100 条通知,说我的脚本失败了,因为我“使用了太多的计算机时间”。我查看并发现以我自己身份运行的执行没有问题,但在过去 7 天连续运行的其他实例中执行了 40 多次。没有一个执行响应尝试终止它,我在触发器上没有任何东西会运行。今天,相同的实例仍在运行,但我不再受到限制,一切都运行良好。我联系了谷歌支持,他们建议堆栈溢出。 -_-
【解决方案3】:

我有一个 Google 插件脚本,它运行了几个月,并且最近开发了一些与描述的行为类似的行为 - 特别是功能失败,执行时间为 0 秒,并且类型为“未知”。

我还没有找到为什么会这样,不过今天我已经联系了 Google 脚本支持,看看他们是否可以对此有所了解。

拥有发现的是一种解决方法。当我没有更改代码中的任何内容时,我的脚本开始出现这种奇怪的行为。然而,我已经所做的是启用了 V8 运行时。如果我将它切换回旧的 ES5“Rhino”运行时,一切都会恢复到以前的工作状态。

See this page for info on how to do that,试一试。我仍在梳理我的脚本以查找任何列出的不兼容问题,但没有发现任何问题,但至少我的用户现在可以在我搜索时继续使用该脚本!

当使用 Rhino 运行时,具有“未知”类型的执行恢复到它们之前的值,这似乎都是“Web 应用程序”。

【讨论】:

  • 我没有再遇到这个问题,但我也没有升级到 v8。这周我必须对其进行一些更改,所以我会看看它是否会再次出现任何问题。
猜你喜欢
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多