スケジュール
フォームを後で、または cron スケジュールで実行し、すべてのスケジュールを管理する
- フォームの操作
- フォームをスケジュールする
- スケジュールページ
- cron 式とタイムゾーン
- スケジュールの実行のしくみ
- 予定された実行
- フォームが変更された場合
- ジョブ履歴でのスケジュールされたジョブ
フォームの操作
フォームはすぐに実行する以外のこともできます。 送信 ボタンの横のドロップダウンには、さらに 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 を持つユーザーにしか 表示されません。予定された実行のジョブは、そのユーザーにも表示されます。スケジュールの 最後の出力 には開始したジョブが示されるので、一覧でそのジョブを見つけられます。