google-cloud-platform - cron作业完成后是否有必要退出进程?
问题描述
我正在使用 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 的 Object.exports.createStatusError (/app/node_modules/grpc/src/common.js:91:15) 没有权限.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
是异步记录的。
解决方案
问题是您的应用程序在winston 可以写入文件日志之前退出。我们通过在执行结束时添加睡眠来解决 cron 任务中的此问题,以确保 winston 已完成。
此外,winston 提供了一个 logger.on('finish') 事件,该事件在写入所有待处理日志时触发。要使用完成事件,您需要在记录器行的末尾调用 logger.end()
推荐阅读
- python - 用 numpy.einsum 删除循环
- ios - 如何使用 MetalPetal 遮盖图像并以透明度输出
- python - 使用 Pyrebase 创建匿名用户并连接 Firebase 和访问数据库
- amazon-dynamodb - 就批量数据的性能而言,这是正确的方法。扫一扫或查询。获取 DynamoDB 中的所有表数据
- networking - 如何安全地使用 iPad Pro 作为远程开发工具?
- regex - 如何检查字符串是否包含点(句点)?
- java - UnsupportedClassVersionError 在执行使用 Multi Release Jar 和 Maven 创建的支持 JDK8 和 JDK11 的 Jar 文件时发生
- javascript - 给定数组,编写一个返回订单对象的函数
- java - Spring OAuth2 通过 Client-Id 获取 UserInfoUri
- python-3.x - LP3THW - python3 ex18.py(及更高版本)不再运行