有効期間が短いワークフローはタスクとして実行できます。タスクの実行では、アプリでタスクを実行する方法について説明しています。
また、unix-cron 形式を使用して、指定の間隔でタスクが実行されるようにスケジュールを設定することもできます。スケジュールが設定されていないタスクと同様に、スケジュール設定されたタスクでは、タスクを実行するアプリを push してから、タスクのスケジュールを設定する Job を作成します。
スケジュールは、タスクを 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>
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-job
が kf 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
を呼び出して、ジョブを削除します。