排定工作

您可以將短期工作流程做為工作執行。執行工作: 說明如何在應用程式下執行工作。

您也可以使用 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 排程器不同,後者可為單一工作設定多個排程。如需多個 cron 排程,可以使用多個 Job 達成。

管理工作和時間表

使用 kf jobs 指令,查看目前 Space 中所有已排程和未排程的工作:

$ 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

這項指令會暫停 Job,並停止依先前的排程建立 Task。工作不會遭到刪除,kf schedule-job 可以再次排定工作,繼續執行。

刪除工作

您可以使用 kf delete-job 指令刪除整個 Job:

kf delete-job test-job

這項指令會刪除工作,以及工作建立的所有工作 (包括排定和手動執行的工作)。如果仍有任何工作正在執行,這項指令會強制刪除這些工作。

如要確保執行中的工作不會中斷,請先使用 kf delete-job-schedule 刪除工作排程,等待所有工作完成,然後呼叫 kf delete-job 刪除工作。