スケジュール

フォームを後で、または cron スケジュールで実行し、すべてのスケジュールを管理する

  1. フォームの操作
  2. フォームをスケジュールする
  3. スケジュールページ
  4. cron 式とタイムゾーン
  5. スケジュールの実行のしくみ
  6. 予定された実行
  7. フォームが変更された場合
  8. ジョブ履歴でのスケジュールされたジョブ

フォームの操作

フォームはすぐに実行する以外のこともできます。 送信 ボタンの横のドロップダウンには、さらに 3 つの操作があります。

操作 内容 ロールオプション
スケジュール (定期実行) cron 式に従ってフォームを実行するスケジュールを作成します allowScheduledJobs
後で実行 (1 回限り) 選んだ日時にフォームを 1 回だけ実行するスケジュールを作成します allowPlannedJobs
ストア フィールドの値を保存し、後でフォームに再び読み込めるようにします allowStoredJobs

ロールオプションがオフの操作は表示されません。どの操作でも、 送信 と同じように事前にフォームが検証されます。 2 つのスケジュール操作は スケジュール ページに項目を作成し、 ストア は 保存済みジョブ ページに項目を作成します。 ジョブ ページのサイドバーでは、 未来 の下の スケジュール済み と 保存済み からこれらを開けます。ロールオプションについては ロールオプション で説明しています。

allowScheduledJobs は管理者レベルのオプションとして扱ってください。このオプションで作成したスケジュールは、作成したユーザーの所有にはなりません。このオプションを 持つすべてのユーザーが、すべてのスケジュールを表示し、変更できます。また、そのようなスケジュールは、作成者自身のアクセス権にかかわらず、どのフォームでも 管理者権限で実行されます。管理者として信頼できるロールにだけ付与してください。

後で実行 (1 回限り) に必要なのは allowPlannedJobs だけです。 allowScheduledJobs を持たないユーザーの場合、 そのユーザーとして 実行を 予定します。サーバーはそのユーザーがフォームを実行できるかをチェックし、時刻になるとジョブはそのユーザーとして、そのユーザーの所有で実行されます ( 予定された実行 を参照)。


フォームをスケジュールする

フォームに入力してから、 送信 の横のドロップダウンを開き、スケジュール操作のいずれかを選びます。

  • スケジュール (定期実行) は スケジュールを作成 を開きます。 名前 と cron 式 (既定値の 0 0 * * * は 毎日午前 0 時に実行) を入力し、 スケジュールを作成 を選びます。
  • 後で実行 (1 回限り) は 後で実行 を開きます。 名前 を入力して 実行日時 を選び、 ジョブをスケジュール を選びます。

名前はすべてのスケジュールの中で一意である必要があります。スケジュールには、フォームの名前と、その時点でフォームが生成した extravars のコピーが YAML で保存されます。毎回の実行ではそのコピーが使われるため、ジョブが受け取る内容を変えるには スケジュール ページで編集してください。

スケジュール


スケジュールページ

スケジュール ページには、すべてのスケジュールが一覧表示され、7.3.0 以降は 有効 列もあります。 allowScheduledJobs が必要です。各行のメニューには次の操作があります。

操作 内容
編集 名前、種類、cron 式または実行日時、フォーム、extra vars を変更します
今すぐ実行 cron 式や実行日時を待たずに、スケジュールを今すぐ実行します
有効にする または 無効にする 有効 列の表示に応じて、スケジュールをオンまたはオフにします (7.3.0 以降)
削除 スケジュールを削除します。すぐに実行されなくなります
最後の出力 スケジュールのページで、前回の実行が報告した内容 (開始したジョブの番号など) を表示します

ここでスケジュールを一から作成することもできます。 フォーム を選び、 1 回限りの実行 にチェックを入れて 実行日時 を設定するか、チェックを入れずに cron スケジュール を設定します。 Extra vars は入力用のフォームがない YAML なので、 playbook に必要な値を自分で、ディクショナリ (key: value のペア) として追加してください。

cron スケジュール フィールドは cron エディターで、式を言葉で説明し、プリセットを提供し、次回以降の実行をプレビューします。 サーバーは、実行できない式や、決して発生しない式を拒否します。

7.3.0 以降、各スケジュールには 有効 スイッチがあり、削除せずに一時停止できます。オフにしたスケジュールは設定とともにページに残りますが、 自動では実行されません。定期実行のスケジュールは cron のタイミングをスキップし、1 回限りのスケジュールは 実行日時 を過ぎても、再びオンにされるまで 待機します。 今すぐ実行 では引き続き必要に応じて実行できます。新しいスケジュールはオンで作成され、7.3.0 より前から あったスケジュールはアップグレード後にオンになります。


cron 式とタイムゾーン

定期実行のスケジュールには、標準的な 5 フィールドの cron 式を指定します: 分、時、日、月、曜日です。

式 実行タイミング
*/15 * * * * 15 分ごと
0 2 * * * 毎日 02:00
30 7 * * 1-5 月曜日から金曜日の 07:30
0 0 1 * * 毎月 1 日の午前 0 時

その他の例と、エディターが受け付けない cron の機能については、FAQ の どの cron 式を使えますか? を参照してください。

cron スケジュールは、プロフィールやブラウザーのタイムゾーンではなく、 LOG_TZ (既定は UTC ) で設定した サーバーのタイムゾーンで実行されます。cron エディターも、同じタイムゾーンで次回以降の実行をプレビューします。


スケジュールの実行のしくみ

スケジュールの時刻になるとキューに入れられ、サーバーは 10 秒ごとにキューを確認して、キューにあるスケジュールを 1 つずつ開始します。

  • 定期実行 のスケジュールは、前回の実行がまだキューにあるか実行中の場合はそのタイミングをスキップするため、実行が重なることはありません。
  • 1 回限り のスケジュールは 実行日時 から 1 分以内に実行され、その後削除されます。 今すぐ実行 で開始した場合も同じです。
  • ステータス は、ジョブが開始された場合は success、開始できなかった場合は failed です。 success はジョブが 起動されたことを示すだけなので、どう終了したかはジョブを開いて確認してください。

allowScheduledJobs で作成したスケジュールは、組み込みユーザー Schedule Service (種類 schedule ) として admin ロールで実行されます。スケジュールを作成した人のアクセス権にかかわらずどのフォームでも実行でき、extravars の ansibleforms_user はこのユーザーを表します。 予定された実行 は、代わりに予定したユーザーとして実行されます。

ジョブには schedule オブジェクト ( id、 name、 form を含む) も渡されるため、playbook はスケジュールによって開始されたことがわかります。

schedule:
  id: 3
  name: Nightly cleanup
  form: Cleanup servers

予定された実行

allowScheduledJobs を持たないユーザーが 後で実行 (1 回限り) を使うと、予定された実行が作成されます。これはそのユーザーに結び付いた 1 回限りのスケジュールです。

  • 予定したとき、サーバーはそのユーザーがフォームを実行できるか (フォームの roles ) をチェックします。詳細モードには allowVerboseMode が必要です。予定された実行は常に 1 回限りで、cron 式は拒否されます。
  • 起動時の検証が enforce の場合、予定した時点でフィールドの値がチェックされるため、拒否される実行は、 ユーザーがまだ画面を見ている間に拒否されます。
  • 実行されるとき、ジョブはそのユーザーとして、そのユーザーの所有で、ブラウザーからの起動と同じチェックを経て実行されます。 その時点でのフォームのロール、予約済みの extravars の除去、起動時の検証です。 ansibleforms_user はそのユーザーを表します。

予定したユーザーには、 allowScheduledJobs が必要な スケジュール ページは表示されません。ジョブは自分のジョブ履歴に表示されます。


フォームが変更された場合

スケジュールは名前でフォームを参照し、実行のたびに、その時点で定義されているとおりにフォームを実行します。

  • フォームが編集された場合: 次回の実行では、新しい定義 (playbook、テンプレート、インベントリ) が、スケジュールに保存された extravars とともに使われます。フォームは描画されないため、フィールドは再計算されません。それに合わせてスケジュールの extra vars を編集してください。
  • フォームの名前が変更された、または削除された場合: 実行は失敗し、 ステータス は failed になり、 最後の出力 には Failed to launch : No such form '<name>' と表示されます。スケジュールを編集して正しいフォームを選ぶか、削除してください。

ジョブ履歴でのスケジュールされたジョブ

スケジュールの実行ごとに通常のジョブが作成され、 ジョブ ページに、ユーザーを Schedule Service として、 予定された実行の場合は予定したユーザーとして一覧表示されます。

Schedule Service のジョブはスケジュールを作成した人のものではないため、管理者と showAllJobLogs を持つユーザーにしか 表示されません。予定された実行のジョブは、そのユーザーにも表示されます。スケジュールの 最後の出力 には開始したジョブが示されるので、一覧でそのジョブを見つけられます。