タスクのスケジュールを設定する

有効期間が短いワークフローはタスクとして実行できます。タスクの実行では、アプリでタスクを実行する方法について説明しています。

また、unix-cron 形式を使用して、指定の間隔でタスクが実行されるようにスケジュールを設定することもできます。スケジュールが設定されていないタスクと同様に、スケジュール設定されたタスクでは、タスクを実行するアプリを push してから、タスクのスケジュールを設定する Job を作成します。

スケジュールは、タスクを 1 日に複数回実行するようにも、特定の月の特定の日付に実行するようにも定義できます。

スケジュール設定されたタスクを実行するアプリを push する

  1. test-app リポジトリのクローンを作成します。

    git clone https://github.com/cloudfoundry-samples/test-app test-app
    cd test-app
    
  2. アプリを push します。

    kf push APP_NAME --task コマンドを使用してアプリを push します。--task フラグは、アプリがタスクの実行に使用されることを想定しています。そのため、アプリにルートは作成されず、またアプリは長時間実行されるものとしてデプロイされません。

    kf push test-app --task
    
  3. アプリの一覧を表示して、アプリ インスタンスまたはルートが作成されていないことを確認します。

    kf apps
    

    アプリが起動しておらず、URL がないことを確認します。

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

Job の作成

スケジュールに基づいてタスクを実行するには、まず、タスクを記述する Job を作成する必要があります。

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

Job は、一時停止またはスケジュール未設定のタスクを開始しますが、kf run-job によって手動で実行されるか、kf schedule-task によってスケジュールが設定されるまで、タスクは作成されません。

Job を手動で実行する

kf run-task でタスクを実行する場合と同様に、Job はアドホックで実行できます。このオプションは、スケジュールを設定する前にジョブをテストする場合や、スケジュールだけでなく必要に応じて実行できるようにする場合にも役立ちます。

kf run-job test-job

このコマンドは、Job によって定義されたタスクを直ちに 1 回だけ実行します。

Job のスケジュール設定

Job の実行スケジュールを設定するには、kf schedule-job コマンドで unix-cron 形式のスケジュールを指定する必要があります。

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

このコマンドは、Job をトリガーして、指定されたスケジュールでタスクを自動的に作成します。この例では、タスクが 1 分ごとに実行されます。

新しいスケジュールで kf schedule-task を実行すると、ジョブのスケジュールを更新できます。Kf の Job に設定できる cron スケジュールは 1 つのみです。これは、1 つの Job に対して複数のスケジュールを使用できる PCF Scheduler とは異なります。複数の cron スケジュールが必要な場合は、複数の Job を使用します。

Job とスケジュールを管理する

kf jobs コマンドを使用して、現在のスペースにあるすべての Job(スケジュールを設定した Job とスケジュールを設定していない Job の両方)を表示します。

$ 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 コマンドを使用すると、アクティブにスケジュール設定されている Job のみを表示できます。

$ 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-jobkf job-schedules の出力に含まれていないことがわかります。

Job のスケジュールをキャンセルする

スケジュールされた Job を停止するには、kf delete-job-schedule コマンドを実行します。

kf delete-job-schedule test-job

このコマンドは Job を一時停止し、前のスケジュールで作成したタスクを停止します。ジョブは削除されません。kf schedule-job によって再スケジュールし、実行を継続できます。

Job の削除

kf delete-job コマンドで Job 全体を削除できます。

kf delete-job test-job

このコマンドは、Job とそれによって作成されたすべてのタスク(スケジュールされた実行と手動実行の両方)を削除します。実行中のタスクがある場合、このコマンドを実行すると、これらのタスクが強制的に削除されます。

実行中のタスクが中断されないようにするには、kf delete-job-schedule でジョブのスケジュールを削除し、すべてのタスクが完了してから kf delete-job を呼び出して、ジョブを削除します。