cron工作完成后是否需要退出该过程?

时间:2019-06-05 03:38:25

标签: google-cloud-platform google-kubernetes-engine

我正在使用GKE cron作业和Node.js。我怀疑在完成cron工作之后是否有必要退出该过程?我知道GKE在完成cron工作后会破坏豆荚。

这是我的代码:

try {
      await job();
    } catch (error) {
      console.error(`Run ${context.jobName} cron job failed.`);
      console.error(error);
      process.exit(1);
    }

process.exit(0)

然后,我发现了另一个问题。如果使用@google_cloud/logging-winston,则在完成cron作业后退出该进程。它将引发错误:

  

错误:7 PERMISSION_DENIED:调用方在Object.onReceiveStatus(/ app / node_modules / grpc / src / client_interceptors.js:1204:28)位于InterceptingListener._callNext(/app/node_modules/grpc/src/client_interceptors.js:568:42)位于InterceptingListener.onReceiveStatus(/app/node_modules/grpc/src/client_interceptors.js: 618:8)在回调(/app/node_modules/grpc/src/client_interceptors.js:845:24)

我猜@google_cloud/logging-winston尝试登录,但吊舱已损坏。

使用console.log,错误消失了。我猜@google_cloud/logging-winston是异步记录的。

2 个答案:

答案 0 :(得分:0)

问题在于Winston可以写入文件日志之前,您的应用程序正在退出。我们通过在执行结束时添加睡眠以确保Winston完成来解决cron任务中的此问题。

此外,winston提供了logger.on('finish')事件,该事件在所有未决日志均已写入时触发。要处理完成事件,您需要在记录器行的末尾调用logger.end()

答案 1 :(得分:0)

记录完成后,Winston记录器将返回一个回调。

logger.error('Something went wrong!', () => {
    process.exit(1);
});