有効期間が短いワークフローはタスクとして実行できます。タスクの実行では、アプリでタスクを実行する方法について説明しています。
また、unix-cron 形式を使用して、指定の間隔でタスクが実行されるようにスケジュールを設定することもできます。スケジュールが設定されていないタスクと同様に、スケジュール設定されたタスクでは、タスクを実行するアプリを push してから、タスクのスケジュールを設定するジョブを作成します。
スケジュールは、タスクを 1 日に複数回実行するようにも、特定の月の特定の日付に実行するようにも定義できます。
スケジュール設定されたタスクを実行するアプリを push する
test-app リポジトリのクローンを作成します。
git clone https://github.com/cloudfoundry-samples/test-app test-app
cd test-app
アプリを push します。
kf push APP_NAME --task
コマンドを使用してアプリを push します。--task
フラグは、アプリがタスクの実行に使用されることを想定しています。そのため、アプリにルートは作成されず、またアプリは長時間実行されるものとしてデプロイされません。kf push test-app --task
アプリの一覧を表示して、アプリ インスタンスまたはルートが作成されていないことを確認します。
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-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
を呼び出して、ジョブを削除します。