排定工作

您可以將短暫工作流程當做工作執行。「執行工作」一文說明如何在「應用程式」下執行工作。

您也可以使用 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 排程,可以使用多個工作來達成。

管理工作和時間表

使用 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 刪除工作。