タスクのスケジュール設定

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

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

スケジュールは、タスクを 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>
    

ジョブの作成

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

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

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

手動で実行

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

kf run-job test-job

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

ジョブのスケジューリング

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

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

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

新しいスケジュールで kf schedule-task を実行すると、ジョブのスケジュールを更新できます。Kf のジョブに設定できる cron スケジュールは 1 つのみです。これは、1 つのジョブに対して複数のスケジュールを使用できる 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-jobkf 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 を呼び出して、ジョブを削除します。