【问题标题】:Google cloud function not handling sigint谷歌云功能不处理信号
【发布时间】:2020-10-12 00:39:14
【问题描述】:

我使用谷歌云功能已经有一段时间了。错误处理从来没有任何问题,但是最近,当我在本地主机上停止谷歌云功能时,它会给出以下错误。

^CReceived SIGINT
Received SIGINT
^CReceived SIGINT
Received SIGTERM
^CReceived SIGINT

一段时间后,我发现程序在执行完成后仍在执行,出现以下错误。

Error: Process exited with code 0
    at process.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/web-dev/firestore-scripts/node_modules/@google-cloud/functions-framework/build/src/invoker.js:396:29)
    at process.emit (events.js:310:20)
    at process.EventEmitter.emit (domain.js:482:12)
    at process.exit (internal/process/per_thread.js:166:15)
    at Server.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/web-dev/firestore-scripts/node_modules/@google-cloud/functions-framework/build/src/invoker.js:402:29)
    at Object.onceWrapper (events.js:416:28)
    at Server.emit (events.js:322:22)
    at Server.EventEmitter.emit (domain.js:482:12)
    at emitCloseNT (net.js:1657:8)
    at processTicksAndRejections (internal/process/task_queues.js:83:21)

很明显,我希望我的程序在按下 ctrl + c 后停止,但它没有。

我添加了一个 SIGINT 事件侦听器,还添加了一个 try-catch 来处理错误并向客户端发送任何类型的错误的响应。还是不行。

目前,我正在手动终止当前进程,这并不理想。

任何帮助表示赞赏。

【问题讨论】:

  • 您的问题是本地问题还是 GCF 问题?
  • 如果可能的话,您能否分享一下您的 Cloud Function 使用的代码?这将帮助我们了解是否有可以改进的地方
  • 这是本地的问题,代码并不重要,只是导入数据的基本谷歌功能,而只是在执行时您不能停止进程。

标签: javascript node.js google-cloud-platform google-cloud-functions


【解决方案1】:

是的,这很愚蠢。我没有解决方案,但我的解决方法是:

  • Ctrl+C
  • 从浏览器中点击 URL

由于某种原因,这会杀死它。

【讨论】:

    【解决方案2】:

    我认为这与本地 Cloud Functions 实现的Life Cycle 有关。

    当调用者向 Web 服务器发送 HTTP 请求时,框架必须根据开发人员指定的函数签名类型采取解组步骤。然后必须通过传递符合开发人员指定的函数签名类型的适当参数来调用该函数。

    当函数发出它已完成执行的信号时(即“完成信号”),框架必须响应调用者。根据开发人员的函数签名类型,框架可能首先需要将开发人员函数返回的对象编组为 HTTP 响应。

    我的想法是,当您尝试停止程序或与调用者的连接尚未关闭时,云功能仍在运行。

    一个疯狂的猜测是,在执行 Zack 的步骤时,Function 会尝试再次连接到 Web 服务器,但 SIGNINT 具有优先级,从而使程序完全停止。

    引起我注意的是您提到这是最近的行为。我建议直接联系GCP support 进行更深入的检查。您还可以创建Public Issue Tracker。这可以帮助确定这是否确实与函数的生命周期有关,或者函数是否卡住等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2017-11-14
      • 2018-09-22
      • 2018-02-21
      • 1970-01-01
      • 2019-05-14
      • 2020-09-03
      相关资源
      最近更新 更多