アプリケーションスケジュールの管理

Runtime Manager を使用して、実行中のアプリケーションを変更することなく、デプロイされたアプリケーションのフロー内の Scheduler コンポーネントの表示と制御を行うことができます。 たとえば、アプリケーションのうちの 1 つがメンテナンス中である間に、スケジュールされたジョブを無効にすることができます。

[Schedules (スケジュール)]​ タブでは以下を行うことができます。

  • 実行中のアプリケーションでスケジュールを表示する。

  • アプリケーションでスケジュールを変更する。

  • スケジュールを変更せずに、スケジュールされたジョブを直ちに実行する。

  • フローのスケジュールを無効または有効にする。

定期的な間隔でトリガーする​一定間隔​、または指定した Cron 式に基づいた日時にトリガーする ​Cron​ として、Scheduler コンポーネントの種類を設定します。

スケジュールタイプを (一定間隔から Cron、またはその逆に) 変更するには、アプリケーションを更新して再デプロイする必要があります。 デプロイされたアプリケーションのスケジュールタイプを変更することはできません。
アプリケーションスケジュールを表示するには、​「Read Applications (アプリケーションの参照)」​権限に加えて​「Exchange Viewer (Exchange 閲覧者)」​権限が必要です。

スケジュールの設計に関する考慮事項

スケジュールを設計するときには、次の点を考慮してください。

  • ネットワーク障害時の高可用性を計画する。CloudHub 2.0 インフラストラクチャは、ハードウェアの問題や定期メンテナンス、およびセキュリティ更新で再起動します。

    サービス更新やセキュリティパッチ適用中、CloudHub 2.0 では既存のスケジュールが完了するまで 5 分待機します。新しいレプリカが起動すると、次のスケジュール時刻にスケジュールが実行されます。詳細は、​「グローバル設定リファレンス」​の ​shutdownTimeout​ 属性を参照してください。

  • セキュリティパッチの適用後、Runtime Manager を介したカスタム設定はアプリケーション設定ファイルよりも優先されます。

    スケジューラーをリセットし、API を介してカスタム設定を削除できます。

    DELETE /organizations/{organizationId}/environments/{environmentId}/deployments/{deploymentId}/schedulers/{flowName}
  • スケジュールが複数回トリガーされる可能性があるため、データ処理の重複を避けるようスケジュールを設計します。 クラスタリングが有効になっていると、実行されているレプリカの数に関係なく CloudHub 2.0 は 1 つのレプリカでスケジュールを実行します。後続のスケジュールは、別のレプリカで実行される可能性があります。CloudHub 2.0 は、レプリカ全体に複数の同時スケジュールを分散します。

  • クラスタリングされたアプリケーションの場合、CloudHub 2.0 はプライマリノードでのみスケジュールをトリガーします。

  • クラスタリングが有効になっていない場合、スケジュールはすべてのレプリカで個別に実行されます。

  • 一定間隔スケジューラーの場合、最小開始遅延は 5 秒にすることをお勧めします。詳細は、​「Scheduler 要素の無効化または有効化」​を参照してください。

  • アプリケーションが実行されていないためにスケジュールが実行されていない場合、CloudHub 2.0 はアプリケーションが開始されてもすぐにトリガーしません。スケジュールは、次のスケジュール時刻で実行されます。

  • CloudHub 2.0 スケジューラーは、毎回の実行時にジョブ設定を読み取ります。

    スケジューラー設定を更新した場合、次回スケジューラーが実行されるときに変更が有効になります。

  • スケジュールを変更すると、アプリケーションが再デプロイされます。

  • アプリケーションが実行されていない間に過去の時刻にジョブをスケジュールすると、アプリケーションが開始されてもジョブは実行されません。

  • スケジュールは、スケジューラーの定義されたタイムゾーンに基づきます。

  • 複数のレプリカがあるアプリケーションの場合、CloudHub 2.0 はスケジュールされたジョブをすべてのレプリカで実行します。

    [Run (実行)]​ をクリックしてスケジュールされたジョブを直ちに実行する場合、スケジューラーは 1 つのレプリカで実行されます。

    CloudHub 2.0 は、レプリカ全体に複数の同時スケジューラーを分散します。

  • スクリプトを使用して CloudHub 2.0 のスケジュールを管理することはできません。

    CloudHub 2.0 のスケジュールを管理するには、​[Schedules (スケジュール)]​ タブまたは CloudHub 2.0 API を使用してください。

  • フロー名には、文字、数字、ハイフン (​-​)、アンダースコア (​_​)、ピリオド (​.​) のみを含めることができます。文字 ​/​、​[​、​]​、​{​、​}​、​#​ は無効です。

  • デフォルトでは、CloudHub 2.0 のスケジュールは同時に実行されます。スケジューラーは、以前にトリガーされた実行の処理中にスケジュールフローの実行をトリガーします。スケジュールを順番に実行するには、​scheduler​ 設定ファイルで ​disallowConcurrentExecution​ プロパティを ​true​ に設定します。

  • デフォルトでは、スケジューラーは Mule が動作しているマシンと同じタイムゾーンを使用します。これは、必要なタイムゾーンを追加して変更できます。詳細は、​「Cron 式」​を参照してください。

始める前に

Runtime Manager のスケジュール機能を使用するには、Anypoint Studio 7.13 を使用して 1 つ以上の Scheduler 要素を含むアプリケーションをデプロイします。

Anypoint Studio キャンバスの Scheduler コンポーネント

アプリケーションをデプロイしたら、Runtime Manager でスケジュールを管理できます。 アプリケーションが実行されている必要はありません。

Runtime Manager でアプリケーションを表示して管理する

アプリケーションを CloudHub 2.0 にデプロイしたら、Runtime Manager で Scheduler 要素を表示して管理します。

  1. Anypoint Platform から、​[Runtime Manager]​ > ​[Applications (アプリケーション)]​ を選択します。

  2. アプリケーション名をクリックします。

  3. ナビゲーションメニューで ​[Schedules (スケジュール)]​ をクリックします。

    Runtime Manager では、Scheduler 要素がアプリケーションに表示される順序でリストされます。

    「Schedules (スケジュール)」 ページの (1) フロー名と (2) 頻度リンク。
    • [Name (名前)]​ 列には、Scheduler 要素を含むフローの名前 (1) が表示されます。

    • [Schedule (スケジュール)]​ 列の頻度リンク (2) には、要素のスケジュールが表示されます。

  4. ジョブが開始および終了した日時の詳細を確認する場合は、ナビゲーションメニューで ​[Logs (ログ)]​ をクリックします。

    ナビゲーションメニューの [Logs (ログ)] オプション。
  5. 要素の頻度リンクをクリックして、スケジュールエディターを開きます。

    表示されるスケジュールエディターは、スケジュールタイプによって異なります。

  6. スケジュールエディターで、スケジュールを変更するか、または ​[Enabled (有効)]​ チェックボックスをオフにしてスケジュールを無効にします。

  7. [Update (更新)]​ をクリックして設定の変更内容を保存するか、または ​[Cancel (キャンセル)]​ をクリックして保存せずに終了します。

一定間隔スケジュールを変更する

  1. Anypoint Platform から、​[Runtime Manager]​ > ​[Applications (アプリケーション)]​ を選択します。

  2. アプリケーション名をクリックします。

  3. ナビゲーションメニューで ​[Schedules (スケジュール)]​ をクリックします。

    [Schedule (スケジュール)]​ 列には、要素のスケジュールが表示されます。

    一定間隔スケジュールタイプ
  4. 要素の頻度リンクをクリックして、スケジュールエディターを開きます。

  5. スケジュールエディターで、スケジュールを変更するか、または ​[Enabled (有効)]​ チェックボックスをオフにしてスケジュールを無効にします。

    一定間隔スケジュール設定

    頻度には、ミリ秒、秒、分、時間、または日を指定できます。 コール間の最小の推奨頻度は 10 秒です。

    Unresolved include directive in modules/ROOT/pages/ch2-manage-schedules.adoc - include::cloudhub::partial$ch-app-schedule-freq.adoc[]

  6. [Update (更新)]​ をクリックして設定の変更内容を保存するか、または ​[Cancel (キャンセル)]​ をクリックして保存せずに終了します。

Cron スケジュールを変更する

Cron 式を使用すると、「毎週金曜日の午前 9 時 00 分から午前 10 時 00 分まで 5 分おき」といった複雑なスケジュール頻度を作成できます。

Cron スケジュールタイプの頻度を変更する手順は、次のとおりです。

  1. Anypoint Platform から、​[Runtime Manager]​ > ​[Applications (アプリケーション)]​ を選択します。

  2. アプリケーション名をクリックします。

  3. ナビゲーションメニューで ​[Schedules (スケジュール)]​ をクリックします。

    [Schedule (スケジュール)]​ 列には、要素のスケジュールが表示されます。

    Cron スケジュールタイプ
  4. 要素の頻度リンクをクリックして、スケジュールエディターを開きます。

  5. スケジュールエディターで、スケジュールを変更するか、または ​[Enabled (有効)]​ (1) チェックボックスをオフにしてスケジュールを無効にします。

    (1) [Enabled (有効)] オプションと (2) [Quick reference (クイックリファレンス)] リンクを含む Cron スケジュール設定
  6. スケジュールエディターの ​[Time Zone (タイムゾーン)]​ ドロップダウンメニューからスケジュールのタイムゾーンを選択します。

  7. スケジュールエディターで ​[Quick reference (クイックリファレンス)]​ (3) をクリックして、必須項目と許可される値のテーブルを展開するか折りたたみます。

    この例の Cron 式は、10 秒間隔のスケジュールを設定しています。

    Cron トリガーの作成についての詳細は、次の方法で確認できます。

    1. Quartz ドキュメント​を参照します。

    2. バージョンを選択し、​[Documentation (ドキュメント)] > [User’s Guide (ユーザーガイド)] > [Tutorial (チュートリアル)]​ をクリックして、​[CronTrigger]​ レッスンをクリックします。

  8. [Update (更新)]​ をクリックして設定の変更内容を保存するか、または ​[Cancel (キャンセル)]​ をクリックして保存せずに終了します。

スケジュールされたジョブの即時実行

毎晩実行するジョブを今すぐデバッグする場合は、アプリケーションでスケジュールを更新しなくても、実行中のジョブをトリガーできます。実行中のスケジューラーのインスタンス間でジョブをトリガーすると、指定された期間のタイマーがリセットされます。

スケジュールされたジョブを直ちに実行する場合、複数のレプリカがあるアプリケーションの場合でも、スケジューラーは 1 つのレプリカで実行されます。

スケジュールを上書きしてジョブを直ちに実行する手順は、次のとおりです。

  1. Anypoint Platform から、​[Runtime Manager]​ > ​[Applications (アプリケーション)]​ を選択します。

  2. アプリケーション名をクリックします。

  3. ナビゲーションメニューで ​[Schedules (スケジュール)]​ をクリックします。

  4. 管理する要素を選択してから、​[Run (実行)]​ をクリックします。

Scheduler 要素の無効化または有効化

接続しているアプリケーションがメンテナンス中である間に、スケジュールされたジョブを無効にし、メンテナンスの完了後に再度有効にすることができます。

スケジューラーを再度有効にするまで、CloudHub 2.0 はスケジュールされたジョブを実行しません。

既知の問題​: スケジューラーを無効にしても、スケジューラーはアプリケーションの起動時に実行されます。スケジューラーが実行されないようにする場合は、Anypoint Studio を使用してアプリケーションで ​startdelay​ プロパティを 5 秒に設定します。

Scheduler 要素を無効にする手順は、次のとおりです。

  1. Anypoint Platform から、​[Runtime Manager]​ > ​[Applications (アプリケーション)]​ を選択します。

  2. アプリケーション名をクリックします。

  3. ナビゲーションメニューで ​[Schedules (スケジュール)]​ をクリックします。

  4. 管理する要素を選択してから、​[Disable (無効化)]​ をクリックします。

    スケジュールエディターで ​[Enabled (有効)]​ を選択解除または選択して、スケジュールを無効または有効にすることもできます。

    スケジュールエディターので [Enabled (有効)] 切り替え

ローリング更新デプロイメントモデルと再作成デプロイメントモデルのスケジュールの動作

クラスターモードとローリング更新デプロイメントモデルが有効になっているアプリケーションの初期デプロイメント中は、アプリケーションの一定間隔スケジューラーがアプリケーションの起動と共に実行されます。​ローリング更新プロイメントモデルから再作成デプロイメントモデル​に切り替えると、スケジューラーはアプリケーションの起動と共に再度トリガーされます。再作成デプロイメントモデルからローリング更新デプロイメントモデルに切り替えると、スケジューラーは起動時に実行されなくなり、代わりに設定された頻度に基づいてトリガーされるようになります。

これは、再作成デプロイメントモデルで以前のアプリケーションインスタンスが無効になり、新しいクラスターで再起動することが原因で発生します。スケジューラーが最後に実行されたときの以前のレコードは保存されません。この場合、固定日付の頻度であるかどうかに関係なく、Mule でスケジューラーが実行されます。ただし、ローリング更新デプロイメントモデルでは、以前の設定が保存されます。