安排任务

您可以将短期工作流作为任务运行来执行这些工作流。运行任务介绍了如何在应用下运行任务。

您也可以安排任务按周期性间隔运行,使用 unix-cron 格式指定该间隔。对于计划任务,您首先要像运行计划外任务一样推送运行任务的应用,然后创建作业来安排任务。

您可以定义时间表,以便让您的任务每天运行多次,或在特定的日子和月份运行。

推送用于运行计划任务的应用

  1. 克隆 test-app 代码库

    git clone https://github.com/cloudfoundry-samples/test-app test-app
    cd test-app
  2. 推送应用。

    使用 kf push APP_NAME --task 命令推送应用。--task 标志表示应用的用途用于运行任务,因此不会在应用上创建路由,也不会部署为长时间运行的应用。

    kf push test-app --task
  3. 通过列出应用,确认没有创建应用实例或路由。

    kf apps

    请注意,该应用尚未启动,也没有网址。

    Listing Apps in Space: test-space
    Name                     Instances  Memory  Disk  CPU   URLs
    test-app                 stopped    1Gi     1Gi   100m  <nil>
    

创建作业

如需按计划运行任务,您必须先创建一个描述该任务的作业。

kf create-job test-app test-job "printenv"

该作业初始处于暂停或未安排状态,直到由 kf run-job 手动执行或由 kf schedule-task 安排后,才会创建任务。

手动运行

作业可以临时运行,类似于通过 kf run-task 运行任务。除了用于计划目的之外,该选项还可以帮助您根据需要在安排或运行作业之前先对其进行测试。

kf run-job test-job

此命令会立即运行由作业定义的任务一次。

安排作业

如需安排执行作业,您必须在 kf schedule-job 命令中提供 unix-cron 时间表。

kf schedule-job test-job "* * * * *"

此命令会触发作业按照指定的时间表自动创建任务。此示例中的任务每分钟运行一次。

您可以通过使用新的时间表运行 kf schedule-task 来更新作业的时间表。Kf 中的作业只能有一个 cron 时间表。这与 PCF Scheduler 不同,后者允许单个作业有多个时间表。如果您需要多个 Cron 时间表,则可以通过多个作业来实现。

管理作业和时间表

使用 kf jobs 命令在当前空间中查看所有作业(包括计划作业和计划外作业)。

$ kf jobs
Listing Jobs in Space: test space
Name               Schedule    Suspend  LastSchedule  Age  Ready  Reason
test-job           * * * * *   <nil>    16s           2m   True   <nil>
unscheduled-job    0 0 30 2 *  true     16s           2m   True   <nil>

此外,您只能查看使用 kf job-schedules 命令主动安排的作业。

$ kf job-schedules
Listing job schedules in Space: test space
Name           Schedule   Suspend  LastSchedule  Age  Ready  Reason
test-job       * * * * *  <nil>    16s           2m   True   <nil>

请注意,unscheduled-job 未列在 kf job-schedules 输出中。

取消作业的时间表

您可以使用 kf delete-job-schedule 命令停止计划作业。

kf delete-job-schedule test-job

此命令会暂停作业,并停止按先前的时间表创建任务。该作业不会被删除,kf schedule-job 可以再次安排该作业以继续执行。

删除作业

可以使用 kf delete-job 命令删除整个作业。

kf delete-job test-job

此命令会删除作业以及由作业创建的所有任务,包括计划执行和手动执行。如果有任何任务仍在运行,则此命令会强制删除这些任务。

如果您要确保正在运行的任务不会被中断,请先使用 kf delete-job-schedule 删除作业时间表,然后等待所有任务完成之后,再通过调用 kf delete-job 删除作业。