JS7® JobSchedulerデイリープランサービスと実行計画

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、オープンソースのジョブ管理システムです。
本記事では、JS7®JobSchedulerで実装されているデイリープランサービスの機能について記載しています。

https://kb.sos-berlin.com/display/JS7/JS7+-+Daily+Plan+Service

詳細な情報については、以下をご覧下さい。
- ナレッジベース（英語）　https://kb.sos-berlin.com/display/PKB/JS7
- 日本語紹介資料 https://www.ossl.co.jp/
- 日本語フォーラム　https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
- Facebook https://www.facebook.com/Jobscheduler-Japan-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97-594469610565511/timeline/
- 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
- JIRA（英語） 　https://change.sos-berlin.com/secure/Dashboard.jspa
- User Forum（英語）　http://sourceforge.net/projects/jobscheduler/forums/forum/486122
- SOS社ホームページ　http://www.sos-berlin.com

# 1. 前提条件

JS7® JobScheduler V.2.3以上がインストール済みであること
ワークフローの作成／実行が一通りできること
JS7® JobSchedulerの概要及びインストール方法については以下を参照ください
**Dockerでのインストール手順**　https://qiita.com/satoruf/items/360fee5293611433ed33
**Windowsでのインストール手順**　https://qiita.com/Yoshitami/items/6804584592956a483364
**Linux/CLIでのインストール手順**　https://qiita.com/satoruf/items/fa9846f4376d1a50a67e
**JS7® JobSchedulerクイックスタート**https://qiita.com/satoruf/items/96f21ef25bcb35e47b21

# 2. デイリープランサービスについて

デイリープランサービスはJOCコックピットのバックグラウンドサービスの一つで、定義されているスケジュールから毎日定時にワークフローの実行計画（オーダー）を作成し、コントローラーに配布します。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/e2081e40-f1e4-4079-0afa-81bd4a2c98db.png)

新規作成されたスケジュールは、設定画面の**period_begin**で指定した開始時刻から24時間分がその日の実行計画（オーダー）として自動作成されます。開始時刻が0時であればスケジュール作成した日の翌日分のオーダーから0時に自動作成され、例えば19:00:00に設定すると翌日の19時までの実行計画が当日分として作成されます。
作成されたオーダーは**予定**（Planned）状態になり、コントローラーに配布されると**登録**（Submitted）になり、コントローラーから実行するエージェントに配布され実行を待ちます。
登録されたオーダーは、JOCコックピットやコントローラーが障害時でもエージェントが動いていれば自律的に実行され、実行ログも保存されます。
エージェントクラスター設定がされている場合は、オーダーが登録されているエージェントが障害時でも、クラスター指定した他のエージェントで実行されます。
手動でデイリープランサービスを実行するには、ダッシュボード画面からJOCコックピットメニューのサービス再起動＞デイリープランサービスを選択します。

![スクリーンショット 2022-12-23 15.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/45d34b77-7b01-8bfe-e397-7257e34bbfab.png)

サービスの各種設定は、JOCコックピットの設定からdailyplanを選択し、下記項目を設定します。

![スクリーンショット 2022-12-23 15.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/ae0f943f-2911-35e6-b977-eff532040e0c.png)

- **time_zone**：設定時刻の時間帯を設定します。初期値が"Etc/Utc"になっているので、通常は"Asia/Tokyo"に設定します。
- **period_begin**：24時間分の実行計画を作成する開始時刻を指定されたタイムゾーンで設定します。初期値は00:00:00ですが、例えば19:00:00に設定すると、翌日の19時までの実行計画が当日分として作成されます。
- **start_time**：毎日デイリープランサービスを実行する開始時刻を、指定したタイムゾーンの時間で指定します。この設定がない場合、デイリープランサービスは、period_begin設定で指定された時点の30分前に実行されます。この設定には、period_begin時刻とは関係なく23:00:00などの時刻も指定できます。
- **days_ahead_plan**：オーダーを生成し予定状態で利用可能にする日数を指定します。初期値は7日ですので、１週間分の予定が常に作成されます。
- **days_ahead_submit**：予定済オーダーをコントローラーに配布し、登録状態で利用可能になる日数を指定します。初期値は３日ですので、３日分のオーダーが常に登録されます。

days_ahead_plan、days_ahead_submitを長くすると、スケジュールを変更／削除したいときに予定／登録されたオーダーが大量になり変更する（後述）のが大変になるので、あまり大きくしないことをお勧めします。

予定・登録状態になったオーダーは、実行計画画面で確認できます。

![スクリーンショット 2022-12-23 15.06.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/21ac1aba-329a-ab04-cdce-46b908207849.png)

カレンダーの日付を選択すると、その日の実行計画（オーダー）が確認できます。
当日および、過去日付の実行済みオーダーは、**完了**（Finnished）、直近days_ahead_submitで指定した日数分のオーダーは、**登録**（Submitted）、days_ahead_submitで指定した日数より先から、days_ahead_planで指定した日数までは、**予定**（Planned）と表示されます。

また、カレンダーの下に**登録履歴**●作成済-日時が表示され、選択した日の実行計画が作成された日時がわかります。start_timeで設定した時刻（初期値 23:30）、またはサービス再起動による手動実行をした場合は、その時刻が表示されます。

# 3. 実行計画の変更方法

作成された実行計画（オーダー）は、コントローラー／エージェントに配布されるため、実行計画作成後に該当ワークフロー定義やスケジュール定義を変更しても、自動的に既存実行計画には反映されません。
変更を反映するためには、実行計画画面からカレンダーで日付指定して実行計画を作成し直すか、開始時刻編集かオーダー変数編集で設定変更する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/0fc4bf89-672b-bf6b-ec81-6d11d38e94e6.png)

登録状態のオーダーは、キャンセル、開始時刻編集、オーダー変数編集が可能です。オーダー毎でも、複数オーダー一括選択からでも操作できます。
- **キャンセル**：コントローラー／エージェントに配布されたオーダーをキャンセルし、オーダーを予定状態に戻します。登録状態からオーダーを直接削除することはできません。
- **開始時刻編集**：選択したオーダーの開始時刻を変更できます。他のオーダーには影響ありません。
- **オーダー変数編集**：オーダー変数が設定されている場合は、選択したオーダーのオーダー変数を変更できます。他のオーダーには影響ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/cd3672a1-4ac1-313c-380f-e5e33a9b3729.png)




オーダーを削除するには、キャンセルした後予定状態に変わった後、オーダー削除する必要があります。　登録状態のオーダーを削除することはできません。予定状態のオーダーを再度登録することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/d7641293-2c01-8523-a543-0e7252b811e8.png)

予定状態のオーダーは、カレンダーの日付を複数選択して画面右上のオーダー削除ボタンで一括オーダー削除することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/bcc9330d-f6c9-a209-8f7a-f6429b85f91e.png)

オーダー削除後もカレンダー上の反転表示と登録履歴は残っていますので、完全に登録履歴削除するにはカレンダーの下の登録削除ボタンをクリックします。カレンダーの日付を複数選択することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/4a57ce09-9501-53ab-aada-b5aee762a0ec.png)

# 4 . スケジュール変更方法
##### 恒久的変更
ワークフローの実行周期、時刻、オーダー変数を恒久的に変更する場合
ジョブ定義＞該当スケジュール定義画面から変更し、リリースすると、自動的に作成済み実行計画とオーダーに反映される

##### 恒久的削除
ワークフローのスケジュールを恒久的に削除する場合
ジョブ定義＞該当スケジュール定義を削除すると、実行計画済みのオーダーは全て予定状態になるため、実行計画画面からオーダー削除を行う必要がある

##### 実行予定ワークフローの一時的変更
実行計画オーダー作成済みのワークフローの時刻、オーダー変数を変更する場合
実行計画画面から対象ワークフローの該当オーダーを選択し、開始時刻編集／オーダー変数編集から変更する

##### 実行予定ワークフローの一時的停止
実行計画オーダー作成済みのワークフローを停止する場合
実行計画画面から対象ワークフローの該当オーダーを選択し、オーダーキャンセルする
キャンセルしたオーダーは、予定状態になるので、復旧するにはオーダー登録しなおす
削除したオーダーを復旧するには、実行計画の再作成を行う

##### 複数日の実行予定の停止
ジョブ定義＞該当スケジュール定義＞ランタイム編集画面から、制限の+をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/9232a895-3642-31a5-5e06-cfe817510040.png)

停止期間を有効開始日と有効終了日を入力し、実行日だけ入力、周期追加をクリックし登録後、スケジュールをリリースすると自動的に実行計画が変更される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/0359aafb-1db9-ea56-aa62-891771bb6274.png)

回復する場合は、制限を削除してスケジュールを再リリース

# ５ . まとめ
 
JS7®JobSchedulerは、JOCコックピットやコントローラーが障害時でも、エージェントがワークフローを実行できるようにするために、実行計画をエージェントに事前に配布する仕組みになっています。
つまりワークフロー定義やスケジュール定義を変更しても、変更前の実行計画が存在するため、一旦作成されたものを完全に削除するには、下記の手順を踏む必要があります。

登録状態->キャンセル実行->予定状態->オーダー削除実行->登録履歴削除実行

最初は戸惑うかもしれませんが、この仕組みを理解すれば柔軟な計画変更ができるようになります。

---