【问题标题】:Is it necessary to exit the process after cron job done?cron作业完成后是否有必要退出进程?
【发布时间】:2019-06-05 03:38:25
【问题描述】:

我正在使用 GKE cron 作业和 Node.js。我怀疑是否有必要在 cron 工作完成后退出进程?我知道 GKE 会在 cron 任务完成后销毁 pod。

这是我的代码:

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 尝试记录但 pod 被破坏了。

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

【问题讨论】:

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


    【解决方案1】:

    问题是您的应用程序在winston 可以写入文件日志之前退出。我们在 cron 任务中解决了这个问题,方法是在执行结束时添加睡眠以确保 winston 已完成。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-17
        • 2010-11-17
        • 2013-08-20
        • 1970-01-01
        相关资源
        最近更新 更多