JobScheduler 2.5.2 アップデート時のメモ

# 概要

JobScheduler 2.5.2 アップデート時の対応メモ。
※私が利用している環境における対応のメモです。
※導入時期や、利用している機能によって、必要な対応は異なります。

# ver 2.5.2 のdockerコンテナが起動しない(修正済み)

## 問題

ver 2.5.2 のdokerコンテナ（ joc, controller, agent とも） が起動しない

## 原因

イメージ作成時のRUNコマンド中にて、jobschedulerユーザー作成で、rootグループ所属の指定に変更されている。

```shell
# ver2.5.1
adduser -u ${JS_USER_ID:-1001} (略) jobscheduler
# ver2.5.2
adduser -u ${JS_USER_ID} -G root (略) jobscheduler
```

この結果、jobschedulerグループが作られず、各スクリプトの動作に影響が出ている

## 対応

:::note
本件は2023-3-16時点で修正されたことを確認しました。
イメージの更新のみで対応可能です。
:::

（以下は記録です）

joc, controller, agent とも、下記の要領で対応ができる
（修正するファイルの中身はそれぞれ異なる）

- jobscheduler グループを追加
- ENTRYPOINT で指定されている スクリプト `/usr/local/bin/entrypoint.sh`を修正

`/usr/local/bin/entrypoint.sh`の修正

```shell
# BUILD_USER_ID=$(cat /etc/passwd | grep jobscheduler | cut -d ':' -f 4)
# BUILD_GROUP_ID=$(cat /etc/group | grep jobscheduler | cut -d ':' -f 3)
BUILD_USER_ID=$(cat /etc/passwd | grep jobscheduler | cut -d ':' -f 3)
BUILD_GROUP_ID=$(getent group root | cut -d ':' -f 3)
```

- `BUILD_USER_ID`,`BUILD_GROUP_ID`の定義を修正
  - BUILD_USER_IDは、gidの取得となっているため、uidの取得に修正
  - BUILD_GROUP_IDは、この指定ではjobschedulerグループおよびjobschedulerユーザーがメンバーとなるグループのgidを拾うため、該当グループのgid取得となるように修正（ver 2.5.2 では rootグループ）

あとは、Dockerfileで修正した`entrypoint.sh`で上書きし、jobschedulerグループ追加する処理を加える。
（controller, agentも同じ要領で対応可能）

jocのDockerfileのサンプル

```Dockerfile
FROM sosberlin/js7:joc-2-5-2
COPY contents/joc-2-5-2_entrypoint.sh /usr/local/bin/entrypoint.sh
RUN groupadd jobscheduler && \
    chmod +x /usr/local/bin/entrypoint.sh
```

これで起動を確認。

その他、controller, agent はマウント指定するべきディレクトリのパスが変更となるため注意
（truststore, keystore など配置する場合は配置先のパスも変わる）

- controller
  - (2.5.1まで) /var/sos-berlin.com/js7/controller/var
  - (2.5.2) /var/sos-berlin.com/js7/controller
- agent
  - (2.5.1まで) /var/sos-berlin.com/js7/agent/var_4445
  - (2.5.2) /var/sos-berlin.com/js7/agent/

# docker版joc JETTY https対応について

JETTYのhttps対応時は、`/var/sos-berlin.com/js7/joc/start.d/`に、https.ini,  ssl.ini を配置する
 (拡張子.iniならば他のファイル名でも動作するが、entrypoint.sh見るとssl.iniであるため、そちらの名前に揃える)
truststore, keystore ファイルの配置場所は、従来通り `/var/sos-berlin.com/js7/joc/resources/joc/` (`${JETTY_BASE}/resources/joc/`)でよい

# インストーラー版joc start.ini の変更（推奨）

ver 2.5 系より、`{JETTY_BASE}/start.ini` ではなく、`{JETTY_BASE}/start.d/*.ini` の設定を読むように変更となっている。
例えば構築時にansbile等でファイル差し替えを行っている場合は、対応が望ましい。（起動Port指定やhttps対応などの設定）
（start.iniでも起動はするが、ログに警告がでる）

# joc.properties の変更

ver 2.5.2 系より、`{JETTY_BASE}/resources/joc/joc.properties` の設定値に、`cluster_id`が追加された。
例えば構築時にansbile等でファイル差し替えを行っている場合は、対応が必要。（コンポーネント間のhttps対応などの設定）
（インストーラー版では、この指定がないと起動できない）

# その他の動作変更点

## Monitor変数不備の解消

2.4系以降からTIME_ELAPSED変数が表示されなかった問題が解消したことを確認

## DailyPlan関連のOrder修正時の動作変更

https://change.sos-berlin.com/browse/JOC-1450?src=confmacro
Workflowを作成、更新する際に、DailyPlanへの反映タイミングを指定するメニューが追加された。
該当WorkFlowについては、指定日以降、DailyPlanで作成されたOrderが消える。
（以前は旧バージョンのWorkflowに関するOrderが残ったまま）
新しいWorkflowのOrderに差し替えではないため注意が必要！

スケジュール修正時も同様に反映タイミングの指定があり、こちらはNowで指定すれば、既存のOrderについても開始時刻の修正が反映される。

いずれにせよ、Workflow、スケジュール変更時は、従来通りDailyPlanのチェックし、必要に応じて再作成するのが無難。

## OrderId の日付部分の変更

https://change.sos-berlin.com/browse/JOC-1476?src=confmacro
OrderId の頭のyyyy-mm-dd部分が、DailyPlan設定のTimeZone日付に修正された。
※今まではUTC日付だったため日本時間の9時を境に切り替わっていた。

## 休業日カレンダー利用時のDailyPlan動作の変更

https://change.sos-berlin.com/browse/JOC-1484?src=confmacro
従来スケジュールで非稼働日カレンダーを選んだ場合、どのオプションを選んでも、DailyPlanは「suppress execution」の動作となってしまう問題があったが、解消を確認。
この修正に伴い、毎日のスケジュールで休業日にOrderが作成されない問題も解消していることを確認。 ※適当な非稼働日カレンダーを用意せずとも、適切に作成される。

## リターンコードの指定に範囲指定対応

https://change.sos-berlin.com/browse/JS-2035?src=confmacro
ジョブのリターンコード指定欄が `0,1,2,3,4,5,6,7,8,9` → `0..9` で指定可能に。
許容するコード範囲が多かった場合でも対応しやすくなった。