JS7® JobScheduler DailyPlanによるスケジュール作成

# 概要

JS7 JobScheduler で、DailyPlanを使ってWorkFlowの実行スケジュールを作成する方法について解説します。

# 前提条件

- JS7 jobscheduler の環境準備、初期設定を済ませていること。
まだの方はこちらから
[JS7® JobScheduler 初期設定、サンプルWorkFlowの登録](https://qiita.com/saitamanokusa/items/2d3162b688329f5ecae2)
- WorkFlowの作成、実行、ログ確認などの基本操作ができること。
  こちらで簡単な操作説明をしています
  [JS7 JobScheduler 初めてのWorkFlow実行](https://qiita.com/saitamanokusa/items/1e5ab48cd2e9d38e035c)
- スケジュール定義を理解していること。
  本記事は、既にスケジュールを定義できることを前提とした内容です。
  こちらで基本操作を説明しています。
  [JS7® JobScheduler スケジュールの設定](https://qiita.com/saitamanokusa/items/8598a4a1a0f6d428e0e9)
- 本記事はJobScheduler Ver. 2.3.1, 2.4.1 で確認した内容です。
今後内容が変わる可能性があります。

:::note warn
Ver 2.5.1以前の環境では、スケジュール定義にて休業日カレンダーを使用した場合、他のスケジュール分も含めて休日のDailyPlanが作られなくなる問題を把握しています。
（※Ver 2.5.2で解消しました）
もし対象バージョン利用の場合は、下記の記事で、回避手段を紹介していますので、そちらをご参考ください。
[【補足】休業日カレンダー利用時の回避手段](https://qiita.com/saitamanokusa/items/8598a4a1a0f6d428e0e9#%E8%A3%9C%E8%B6%B3%E4%BC%91%E6%A5%AD%E6%97%A5%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E5%88%A9%E7%94%A8%E6%99%82%E3%81%AE%E5%9B%9E%E9%81%BF%E6%89%8B%E6%AE%B5)
:::

# DailyPlanとは

あらかじめ作成したスケジュール定義にしたがって、日単位で、実行計画(DailyPlan)を作成できます。
そのため、想定通りの日時にスケジュールが登録されているかを事前に確認し、必要に応じて修正を行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/c08751e5-afbf-4f4b-a165-902509d6067e.png)

また直近の予定は、自動的にOrder登録状態となり、Order情報（実行日時、対象WorkFlowなど）は、事前にController、Agent側に送信されます。
そのため、万が一JOCで障害が発生した場合でも、エージェントのみでスケジュール処理を実行できます。
（WorkFlowが単一エージェントで実行される場合）

# State の種類

DailyPlanで登録されるOrderの状態には、下記の3パターンがあります。

- planned : Orderの仮登録状態。予定確認用。この状態のままでは、処理は実行されない。
- submitted : Orderが登録された状態。Controller、Agentにもスケジュール、対象WorkFlow等の情報が送信されている。
- finished : DailyPlanによるOrderが完了した状態。（正常／エラー含む）※実際の処理結果はHistoryで確認します。

# DailyPlanの作成方法

DailyPlanの作成には、サービスによる自動実行と、日付を指定して手動実行の２パターンがあります。
普段はDailyPlanサービスによる自動処理に任せっぱなしになりますが、WorkFlow、スケジュール修正などを行い、Orderを再登録する場合など、必要に応じて使い分ける必要があります。

## 事前準備

本例では、あらかじめ２つのスケジュールが定義されていることを前提とします。（WorkFlowは任意）

- sche_daily10　毎日10時に実行
- sche_daily12　毎日12時に実行

## DailyPlanサービスについて

スケジュールを自動登録するDailyPlanサービスについて説明します。

### DailyPlanサービスの設定

Settings より DailyPlanサービスの設定があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/0e72d37e-6c96-388e-050a-a3a638339762.png)

- time_zone :
  - DailyPlanの日付の基準となるTimeZoneを指定
- period_begin :
  - 日付を区切る時刻
  - 通常は `0:00` でよい
  - `05:00` 指定ならば、5/20分のDailyPlan作成で、開始スケジュール 5/20 5:00 - 5/21 5:00 のOrder予定が作成される
- start_time :
  - Daily Planの処理をスケジュール実行する時間
  - 未指定（デフォルト）で、period_beginの30分前に実行される
  （デフォルトで、 period_begin 0:00の場合、23:30にDaily Planサービスが実行される）
- days_ahead_plan :
  - DailyPlanサービス実行時に、指定日先までのPlanが作成される
  　※Planの時点では、Controller/Agentには送信されない
    デフォルト 7 の場合は、7日後までPlanが作成される（※厳密にはUTC日付で7日後まで）
- days_ahead_submit :
  - DailyPlanサービス実行時に、指定日先までOrderが登録される<br>（Controller/Agentに送信され、submittedとなる）
  - デフォルト 3 の場合は、3日後までがSubmittedとなる（※厳密にはUTC日付で3日後まで）
  - 0にすると、Plannedのままとなる

この設定をもとに、毎日定時(デフォルト 23:30)に自動的に設定期間内のDailyPlanが作成されます。

### DailyPlanサービスの手動実行

上記の設定時刻まで待たなくとも、メニュー操作での実行も可能です。

トップ画面　Component Status より JOC のコンポーネントのメニューを選び
`Restart Service` - `Daily Plan Service` で即時実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/b805cbcf-4601-8f8b-0cbb-2b4fc4a37404.png)

既にスケジュールが定義済みの場合は、この操作で7日先までのDailyPlanが作成されます。
設定変更後、スケジュール設定を一括で行う場合などによく使用する操作です。

### 動作確認方法

DailyPlanビューより、現在のDailyPlanの状況を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/bc070b2f-5553-62d5-e056-084d149059af.png)

カレンダーより日付を選択すると、その日の登録スケジュールが確認できます。
当日および、過去日付の実行済みOrderは、Finnished
直近3日以内のOrderは、Submitted
3日より先の日付は、Plannedとなっていることとを確認します。

また、カレンダー下に `Created yyyy/mm/dd hh:mm:ss` が表示されていることを確認してください。

こちらは、選択した日のDailyPlanが作成された日時です。
JOCを起動したままの環境ならば、設定された時刻（デフォルト 23:30）
上記サービス再起動による手動実行をしたならば、その時刻がはいっています。

## DailyPlan手動登録について

DailyPlanビューより、日単位でDailyPlanを作成する方法や、登録されたOrder情報の編集について見ていきます。

### DailyPlanのOrder情報操作（基本）

すでにOrderが登録されている場合、そのOrderの状態を操作してみます。

カレンダーにて、明日の日付を選択してください。
その日にDailyPlanによってスケジュールされているOrder情報が確認できます。
（明日ならばSubmittedとなっているはずです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/333540cb-9713-fd2c-7d40-5b94e8e97b66.png)

Orderを選択して、キャンセルしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/fc0b3e1b-5a7a-a325-a250-e20f72361feb.png)

Planned に変わったことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/b18969af-071a-c72a-176d-2b4af7ceeec7.png)

DailyPlanを削除してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/aefe3e44-dbab-8a42-0ffc-d3a3aa602031.png)

DailyPlanが消え、Planned 状態のOrderも消えました。（Submittedのままでは削除できません）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/0999e887-f2d7-b6b5-9f95-f5adc0ec0f5b.png)

Create Daily Plan を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/f3924556-c200-5375-7897-97c090b09e7a.png)

`All` , `Submit to Controller` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/8b981ba8-46ff-58a2-7a7d-d4d34b28542e.png)

|項目|内容|
|-|-|
|Choose Schedules|選択日が対象となる全スケジュールを登録<br>または個別のスケジュールを選択|
|Overwrite|既にDailyPlanを作成済みの場合、同一スケジュールのOrderを上書きするか|
|Submit to Controller|ControllerにOrder情報を送信（Submittedとなる）|

該当日のDailyPlanが再作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/9fca2c3d-5d4b-0aaa-cadc-1468860afc30.png)

カレンダーより日付をまとめて選択することで、既存のスケジュールを一括でキャンセル、DailyPlan削除を行うこともできます。
（マウスで開始日から終了日まで選択 または Ctrl を押したまま開始日、終了日を選択）

明日以降に登録されている予定をすべてキャンセルし、DailyPlanを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/fcfb22b6-4d1e-44e7-7c02-f4afcb795cf7.png)
登録がすべて削除されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/d63df285-8924-6fdf-d34c-9261cd59b716.png)

DailyPlanサービスを再起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/b805cbcf-4601-8f8b-0cbb-2b4fc4a37404.png)

7日先までのDailyPlanが一括で作成されたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/c195db36-74dd-1296-a684-09ec03d8406d.png)

### スケジュールの修正について

スケジュールを手動でメンテナンスしてみます。

一方のスケジュールは、この日に限って開始時刻を`12:00`から`13:00` に修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/152789c8-08f1-ba77-62f1-5a9bed04822f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/3adb6ec0-9526-b237-14ef-7653f7755d84.png)

一方のスケジュールは、この日に限って削除します。(Cancel後、Remove Order)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/226d4fc4-78b8-3970-9837-b0c414875ef7.png)

DailyPlanサービスを再起動してください。

修正した日を確認し、スケジュールが変わっていないことを確認します。
（一方のスケジュールは13:00開始、もう一方は削除されたまま）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/213aa688-9773-5e2c-7dd5-cab03c55394e.png)

既にDailyPlanが作成済みの日は、サービス実行によって勝手に書き換わることはありません。
マニュアル操作でスケジュールを変更した場合は、あくまでそちらが優先されます。
（ただし直近日程の planned → submitted は自動で書き換わります）

もし修正を一旦リセットし、本来のスケジュール定義通りにもどしたい場合は、キャンセル、DailyPlan削除してから、再作成します。

## WorkFlow変更を反映させるには

DailyPlanで作成されたOrder情報（実行WorkFlow、開始日時など）は、Submittedとなった時点で、既にController／Agentにまで送られています。
この場合、WorkFlowを修正した場合でも、新しいWorkFlowに置き換わりません。

WorkFlowメニューで、*日付範囲 ALL*で確認すると、Submitted状態のOrderが確認できます。
WorkFlowを修正しても、Orderは旧バージョン側に登録されたままで、新バージョン側は空です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/1fec6cec-7362-3616-133b-d36c6ce18d2f.png)

もしすぐに反映させたい場合は、既存の該当Orderをまとめてキャンセルし、再度Submitとしてください。
(DailyPlanサービス再起動 でも可)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/443dc8df-221c-ba68-7b19-c18854455904.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/c5521218-e01f-c1e6-822c-5c597ebbc059.png)

旧バージョンの表示は消え、すべて新バージョン側で登録されていることが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/485cddf2-cc3c-c412-9d99-4215a260987a.png)

### 補足

もしWorkFlowメニューでOrder情報がうまく表示されない場合は monitorサービスの再起動をしてしばらく待ってください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529537/0612f091-dfbf-88aa-06d7-a47a62b4c662.png)

## スケジュールの変更を反映させるには

スケジュール定義を新たに追加したり、開始時刻を変更した場合も、既にDailyPlanが作成済みの場合は、勝手に変更されることはありません。
この場合も、既存のOrderのキャンセル／DailyPlan削除を行い、DailyPlanサービス再起動 を行うことで、簡単に再登録できます。

# 最後に

DailyPlanは、慣れるまでは操作がやや分かりづらいかもしれませんが、要領がつかめれば、先の具体的なスケジュールまで確認できる大変便利な機能です。
本記事の説明で、日常運用に必要となる基本操作はマスターできたかと思います。
”明日から変更”といった場合にも迷うことなく対応できるように、ぜひ操作に慣れてください。

# 参考

[JS7 - Daily Plan (メニュー)](https://kb.sos-berlin.com/display/PKB/JS7+-+Daily+Plan)
[JS7 - Daily Plan Service](https://kb.sos-berlin.com/display/PKB/JS7+-+Daily+Plan+Service)