You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Cloud Run Job自行停止?执行删除操作遇NOT_FOUND错误

问题分析与修复

错误核心原因

你碰到的NOT_FOUND错误本质是混淆了Cloud Run Job的定义模板和运行中的执行实例:

  • process.env.CLOUD_RUN_EXECUTION是当前正在运行的Job执行实例ID,不是Job本身的名称
  • deleteJob API的作用是删除Job的永久定义模板,而非停止正在运行的单次执行实例,用执行ID调用这个接口自然找不到对应资源

修正后的代码

要停止当前运行的Job执行,需使用cancelJobExecution方法,并构造正确的执行实例资源名称:

const endJob = async () => {
  try {
    const runClient = new JobsClient({
      projectId: getProjectId(),
      credentials: {
        client_email: env.gcloudClientEmail,
        private_key: env.gcloudPrivateKey,
      },
    });

    const executionId = process.env.CLOUD_RUN_EXECUTION;
    console.log(`Cancelling job execution ${executionId}`);

    // 构造执行实例的完整资源路径
    const executionName = `projects/${getProjectId()}/locations/europe-west1/jobExecutions/${executionId}`;
    
    // 调用取消执行的API
    const [operation] = await runClient.cancelJobExecution({
      name: executionName
    });
    const [response] = await operation.promise();
    console.log(`Job execution cancelled: ${response.name}`);
    
  } catch (e) {
    console.error('Failed to cancel job execution');
    console.error(e);
  }
};

额外注意事项

  • 确保服务账号拥有roles/run.admin权限,或更精细的run.jobExecutions.cancel权限
  • 确认europe-west1是你的Job实际部署的区域,需与环境变量中的区域保持一致
  • 若确实需要删除Job定义而非停止执行,才使用deleteJob,此时传入的是Job的名称(而非执行ID)

内容的提问来源于stack exchange,提问作者Oliver Dixon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:52:08