本页面介绍了如何使用 crontab 按时间表执行 Cloud Run 作业。
所需的角色
如需获得本页面中描述的操作所需的权限,请让管理员向您授予 Cloud Run 作业的以下 IAM 角色之一:
- 如需使用 Google Cloud CLI 执行作业:Cloud Run 作业的 Cloud Run Invoker (
roles/run.invoker) 角色。 - 如需使用 Cloud de Confiance 控制台执行作业、替换作业配置或取消作业执行:Cloud Run 作业的 Cloud Run Developer (
roles/run.developer) 角色。
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 作业与Cloud de Confiance API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
向服务账号授予对项目的访问权限
如果您尚未为 Cloud Run 作业创建服务账号,请创建一个服务账号。例如:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
将 SERVICE_ACCOUNT_NAME 替换为服务账号的名称(例如 job-scheduler)。
如需获得服务账号执行作业所需的权限,请让管理员向您的服务账号授予项目的 Jobs Executor (roles/run.jobsExecutor) 角色。例如:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
将 PROJECT_ID 替换为您的项目 ID 的名称。
准备工作
如果您尚未创建 Cloud Run 作业,请创建作业。
将 Cloud Run 作业配置为按时间表执行
如需按计划执行 Cloud Run 作业,请执行以下操作:
创建名为
cloud-run-jobs-sched的新目录,并转到此目录中:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
创建一个
Dockerfile文件,并将以下代码行粘贴到其中:FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:536.0.1 RUN apt-get update -y && \ apt-get install -y python3-dev python3-pip python3-venv && \ apt-get install -y cron ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN pip install --no-cache-dir -r requirements.txt # Set up the cron schedule. RUN crontab /app/cron CMD /app/entrypoint.sh
创建一个
entrypoint.sh文件,并将以下代码行粘贴到其中:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
创建一个
main.py文件,并将以下 Python 代码粘贴到其中:import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
创建一个
requirements.txt文件,并将以下依赖项粘贴到其中:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
在您的目录中创建一个
cron文件,并添加用于执行作业的 cron 调度。例如:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
此命令每天凌晨 2 点执行名为
test-job的作业。启动作业执行时发生的任何错误都会显示在服务的日志中。如需为多个作业创建多个调度,请使用您要执行的任何作业及其关联的调度更新
cron文件。例如:${cron_schedule} gcloud run jobs execute --async ${job_1} > /proc/1/fd/1 2>&1 ${cron_schedule} gcloud run jobs execute --async ${job_2} > /proc/1/fd/1 2>&1 ...
部署作业调度服务:
gcloud run deploy JOB_NAME \ --source . \ --region REGION \ --set-env-vars PROJECT=PROJECT_ID,REGION=REGION \ --service-account SERVICE_ACCOUNT \ --no-allow-unauthenticated \ --min-instances=1 \ --no-cpu-throttling
替换以下内容:
- JOB-NAME:Cloud Run 作业的名称
- PROJECT_ID:您的项目 ID。
- REGION:您的 Cloud Run 作业所在的区域,例如
europe-west1。
后续步骤
使用此功能后,您可以执行以下操作: