JS7® JobScheduler インストール方法（Linux/インストールスクリプト版）

# １．JS7®JobSchedulerについて

JS7® JobScheduler インストール方法（Docker版）は以下の記事をご確認ください。
https://qiita.com/satoruf/items/fa9846f4376d1a50a67e

JS7® JobScheduler インストール方法（Linux/CLI版）は以下の記事をご確認ください。
https://qiita.com/satoruf/items/fa9846f4376d1a50a67e

JS7® JobScheduler インストール方法（Windows版）は以下の記事をご確認ください。
https://qiita.com/Yoshitami/items/6804584592956a483364

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しました。
JS7® の主な特徴は、下記となります。

- オープンソース（GNU Public License V.3）
 - Linux/Windows版は、無料で使用可能。（但しクラスタリング構成は有償ライセンスが必要） 
 - 有償ライセンスを購入すれば、クラスタリング構成に加えて、障害対応、バグフィックス／ワークアラウンドの提供、新機能の早期提供、などのサービスが提供される。
 - 有償ライセンスの機能が使用できる、３０日間無償トライアルライセンスも提供されている。申し込みは[こちら](https://www.ossl.co.jp/?page_id=46)から
- 耐障害性
 - 自律型アーキテクチャー（非同期疎結合）による高可用性
 - データベース/ネットワーク障害時もジョブ実行継続
 - ３秒以内のコントローラーフェイルオーバー
- 大規模環境対応
 - 〜 20万ワークフロー
 - 〜 100万ジョブ
 - 〜 1,000エージェント
 - 〜 20,000タスク並列実行
- 高性能
 - ジョブ起動オーバーヘッドなし
 - 1万タスクを5ミリ秒で同時起動
- 高セキュリティ
 - JOC・コントローラー・エージェント間の全通信にクライアント・サーバー認証
 - 定義ファイルにも証明書を付加
 - 外部認証局（CA）をサポート

詳細な情報については、以下をご覧下さい。

 - ナレッジベース（英語）　https://kb.sos-berlin.com/display/PKB/JS7
 - 日本語紹介資料 https://www.ossl.co.jp/
 - 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
 - https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
 - 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/
 - 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

ジョブ・ワークフローの実行方法については、[JS7® JobSchedulerクイックスタート](https://qiita.com/satoruf/items/96f21ef25bcb35e47b21#2-%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)、[JS7® JobSchedulerワークフロー間連携](https://qiita.com/satoruf/items/64b185880f4ac0e05c5d)を御覧ください。

# ２．JS7®の構成について

JS7®は以下のコンポーネントで構成されています。

- JOCコックピット
 - WEB GUI/REST API
 - ジョブ実行制御配布
 - 履歴情報収集・保存
 - ジョブ定義・リソースの作成
 - ジョブ定義の管理とコントローラーへの配布
 - クラスター制御、イベントキュー、ロギングなど
- コントローラー
 - DB接続を廃止
 - ジョブ定義をJOCコックピットから取得
 - 実行履歴をJOCコックピットに送信
 - 実行計画とジョブ定義をエージェントに配布
- 自律型エージェント
 - コントローラーとの通信障害時にも自律的にジョブ実行制御
 - エージェントクラスター内で実行計画とジョブ定義を同期
 - 実行履歴をコントローラーに送信
![js7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/cefc8941-c716-ebe5-e16a-f7653eb92be5.png)

# ３．稼働条件
V.2.6.1 (2023/8現在）
**コントローラー/JOCコックピット**
- CPU 2core<、メモリ8GB<、ディスク空き容量20GB<
- OracleJDK/openJDK 8 - 11, 17
  ※JOCのみV.2.5.0よりjava8はサポートされておりません。
- RHEL/CentOS 7< , Ubuntu, Oracle Linux, Amazon Linux
- Windows Server 2012/2016/2019/2022  (32/64bit)
**エージェント**
- Any Linux/Windows (OracleJDK/openJDK 1.8 - 11, 17がサポートされる環境)
- AIX 6,7 PowerPC
- Solaris 9,10,11 SPARC/x86-64
- HP-UX 11 IA64
- etc.

詳細はこちらを参照（英語）

https://kb.sos-berlin.com/display/JS7/JS7+-+Sizing

https://kb.sos-berlin.com/pages/viewpage.action?pageId=19857566

https://kb.sos-berlin.com/display/PKB/JS7+-+Platforms

# ４．データベースサポート
 - Oracle® 12c, 18c, 19c, 21c
 - SQL Server® 2016, 2017, 2019
 - MariaDB® 10.x
 - MySQL® 5.7, 8.0
 - PostgreSQL® 10 - 15
 - H2 1.4.200

詳細はこちらを参照（英語）

https://kb.sos-berlin.com/display/PKB/JS7+-+Database

# ５．JS7インストール環境
本手順は、JS7®の機能確認を目的とした検証環境のスタンドアロン構成構築の手順です。
実業務では使用しないで下さい。

・CentOS 8.5
・JS7 2.6.1
・PostgreSQL 13.4
・openjdk 17.0.2

・SELinuxはDisabled、Firewalldは停止されていること
・スタンドアロン構成
・JOC、Controller、Agent、DBは同居
・JS7インストールユーザ：scheduler
・作業はすべてインストールユーザのschedulerにて実施
・パッケージをダウンロードするためインターネットへの接続が可能なこと

※JAVAのインストール、DBの設定、JS7インストールユーザの作成は設定済みであること
詳細は以下の「4.インストール手順」～「5. JobScheduler　インストール準備」をご参照ください。

https://qiita.com/satoruf/items/fa9846f4376d1a50a67e

# ６．インストール準備
### （１）インストールパッケージのダウンロード

以下からの作業はインストールユーザのschedulerで作業します。
```shell-session
# su - scheduler
```

作業ディレクトリを作成します。

```shell-session
$ mkdir /home/scheduler/work
```

以下のサイトからJS7のパッケージをダウンロードし、配置します。
※インストールスクリプトにより、ここではパッケージをダウンロードせずに、インストールスクリプトのオプションで、パッケージのダウンロード/インストールを行うこともできます。
その際は本手順の以下のパッケージのダウンロード作業は不要です。

https://www.sos-berlin.com/en/jobscheduler-downloads

・ファイル名：
　　js7_joc_linux.2.6.1.tar.gz
　　js7_controller_unix.2.6.1.tar.gz
　　js7_agent_unix.2.6.1.tar.gz
・配置先：/home/scheduler/work

```shell-session
$ cd /home/scheduler/work/
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_joc_linux.2.6.1.tar.gz
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_controller_unix.2.6.1.tar.gz
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_agent_unix.2.6.1.tar.gz
```

### （２）インストールスクリプトのダウンロード

以下のサイトからJS7のインストールスクリプトをダウンロードし、作業ディレクトリに配置します。
※インストールスクリプトは各バージョンによりオプションの追加/削除されていたりするため、必ずインストーラと同じバージョンをダウンロードして使用してください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Download#JS7Download-download_utilities

・ファイル名：
　　js7_install_joc.sh
　　js7_install_controller.sh
　　js7_install_agent.sh
・配置先：/home/scheduler/work

```shell-session
$ cd /home/scheduler/work/
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_install_joc.sh
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_install_controller.sh
$ wget https://download.sos-berlin.com/JobScheduler.2.6/js7_install_agent.sh
```

ダウンロードしたインストールスクリプトに実行権を付与します。

```shell-session
$ cd /home/scheduler/work/
$ chmod +x *.sh
```

### （３）インストール設定ファイルの準備

responseディレクトリを作成し、JOCインストール用設定ファイルをダウンロードしたJOCのパッケージより解凍し、responseディレクトリに配置します。
※本書ではスタンドアロン構成のため不要ですが、クラスタリング構成を行う場合は、responseディレクトリに、有償ライセンス、ライセンスバイナリファイルもここに配置します。

```shell-session
$ mkdir /home/scheduler/response
$ cd /home/scheduler/work/
$ tar zxvf js7_joc_linux.2.6.1.tar.gz -C /home/scheduler/response/ --strip-components 1 joc.2.6.1/joc_install.xml
```

joc_install.xmlを設定します。

```shell-session
$ vim /home/scheduler/response/joc_install.xml
```

プログラムのインストール先とjettyのベースディレクトリはインストールスクリプトで指定するためここでの設定は不要です。
JOCコックピットが使用するレポーティングデータベース接続の設定をします。
※以下は設定が必要な箇所のみを抜粋しております。

```shell-session
            <!-- Choose the database management system. 
                 Supported values are 'mysql' for MySQL, 'oracle' for Oracle, 
                 'mssql' for Microsoft SQL Server, 'pgsql' for PostgreSQL.
                 Used only if databaseConfigurationMethod=withoutHibernateFile -->
            <entry key="databaseDbms" value="pgsql"/> ## DBを指定
            <entry key="databaseHost" value="localhost"/> ## DB接続先

            <!-- Enter the port number for the database instance. Default ports are for MySQL 3306, 
                 Oracle 1521, Microsoft SQL Server 1433, PostgreSQL 5432. -->
            <entry key="databasePort" value="5432"/> ##DB接続ポート

            <!-- Enter the database schema -->
            <entry key="databaseSchema" value="scheduler"/> ##DB名

            <!-- Enter the user account for database access -->
            <entry key="databaseUser" value="postgres"/> ##DB接続ユーザ

            <!-- Enter the password for database access -->
            <entry key="databasePassword" value="postgres"/> ##DB接続ユーザパスワード
```

# ７．JS7のインストール

### （１）JOCのインストール

ダウンロードしたインストールスクリプトを使用してJOCのインストールを行います。
JOCのインストール先はデフォルトの以下とします。
- ホームディレクトリ：/opt/sos-berlin.com/js7/joc
- データディレクトリ：/home/＜JS7インストールユーザ＞/sos-berlin.com/js7/joc

##### （１）ー１　パッケージをダウンロードした場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをあらかじめダウンロードした場合のインストール手順となります。
「--tarball」オプションで、ダウンロードしたパッケージを指定します。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_joc.sh \
--tarball=js7_joc_linux.2.6.1.tar.gz \
--setup-dir=/home/scheduler/joc.setup \
--response-dir=/home/scheduler/response \
--home=/opt/sos-berlin.com/js7/joc \
--data=/home/scheduler/sos-berlin.com/js7/joc \
--http-port=4446 \
--home-owner=scheduler \
--data-owner=scheduler \
--make-dirs \
--make-service \
--service-name=joc \
--as-user \
--exec-start=StartService
```

##### （１）ー２　パッケージをダウンロードしていない場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをダウンロードしていない場合のインストール手順となります。
「--tarball」オプションの代わりに、「--release」を使用します。このオプションを指定することにより、SOSのWEBサイトから指定したリリースバージョンのパッケージをダウンロードし、インストールします。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_joc.sh \
--release=2.6.1 \
--setup-dir=/home/scheduler/joc.setup \
--response-dir=/home/scheduler/response \
--home=/opt/sos-berlin.com/js7/joc \
--data=/home/scheduler/sos-berlin.com/js7/joc \
--http-port=4446 \
--home-owner=scheduler \
--data-owner=scheduler \
--make-dirs \
--make-service \
--service-name=joc \
--as-user \
--exec-start=StartService
```

各オプションの説明は以下になります。

- --tarball：JOCのパッケージを指定（--releaseを指定する際は不要）
- --release：SOSのWEBサイトからダウンロード/インストールするリリースバージョンを指定（--tarballを指定する際は不要）
- --setup-dir：JOCのパッケージの解凍場所を指定（指定がない場合は、「/tmp」を使用）
- --response-dir：joc_install.xmlや、ライセンスファイルの配置先を指定
- --home：JOCのホームディレクトリを指定
- --data：JOCのデータディレクトリを指定
- --http-port：JOCのhttpポートを指定
- --home-owner：JOCのホームディレクトリのオーナを指定
- --home-owner：JOCのデータディレクトリのオーナを指定
- --make-dirs：各オプションで指定されたディレクトリが存在しない場合は作成
- --make-service：systemdのサービスの作成
- --service-name：systemdのサービス名（指定がない場合は、「js7_joc.service」で作成）
- --as-user：sudoを使用してインストール
- --exec-start：JOCサービスの起動

上記のオプションの他、様々なオプションがあります。詳細は以下をご参照下さい。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+Installation+Script+-+js7_install_joc.sh

### （２）Controllerのインストール

ダウンロードしたインストールスクリプトを使用してControllerのインストールを行います。
Controllerのインストール先はデフォルトの以下とします。
- ホームディレクトリ：/opt/sos-berlin.com/js7/controller
- データディレクトリ：＜ホームディレクトリ＞/var
※データディレクトリはオプションの「--data」を使用することにより変更できます。

##### （２）ー１　パッケージをダウンロードした場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをあらかじめダウンロードした場合のインストール手順となります。
「--tarball」オプションで、ダウンロードしたパッケージを指定します。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_controller.sh \
--tarball=js7_controller_unix.2.6.1.tar.gz \
--home=/opt/sos-berlin.com/js7/controller \
--controller-id=controller \
--http-port=4444 \
--home-owner=scheduler \
--make-dirs \
--make-service \
--service-name=controller \
--exec-start=StartService
```

##### （２）ー２　パッケージをダウンロードしていない場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをダウンロードしていない場合のインストール手順となります。
「--tarball」オプションの代わりに、「--release」を使用します。このオプションを指定することにより、SOSのWEBサイトから指定したリリースバージョンのパッケージをダウンロードし、インストールします。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_controller.sh \
--release=2.6.1 \
--home=/opt/sos-berlin.com/js7/controller \
--controller-id=controller \
--http-port=4444 \
--home-owner=scheduler \
--make-dirs \
--make-service \
--service-name=controller \
--exec-start=StartService
```

各オプションの説明は以下になります。

- --tarball：JOCのパッケージを指定（--releaseを指定する際は不要）
- --release：SOSのWEBサイトからダウンロード/インストールするリリースバージョンを指定（--tarballを指定する際は不要）
- --home：Controllerのホームディレクトリを指定
- --controller-id：コントローラIDを指定（指定がない場合は、「controller」）
- --http-port：Controllerのhttpポートを指定
- --home-owner：Controllerのホームディレクトリのオーナを指定
- --make-dirs：各オプションで指定されたディレクトリが存在しない場合は作成
- --make-service：systemdのサービスの作成
- --service-name：systemdのサービス名（指定がない場合は、「js7_controller.service」で作成）
- --exec-start：Controllerサービスの起動

上記のオプションの他、様々なオプションがあります。詳細は以下をご参照下さい。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+Installation+Script+-+js7_install_controller.sh

### （３）Agentのインストール

ダウンロードしたインストールスクリプトを使用してAgentのインストールを行います。
Agentのインストール先はデフォルトの以下とします。
- ホームディレクトリ：/opt/sos-berlin.com/js7/agent
- データディレクトリ：＜ホームディレクトリ＞/var_4445
※データディレクトリはオプションの「--data」を使用することにより変更できます。

##### （３）ー１　パッケージをダウンロードした場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをあらかじめダウンロードした場合のインストール手順となります。
「--tarball」オプションで、ダウンロードしたパッケージを指定します。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_agent.sh \
--tarball=js7_agent_unix.2.6.1.tar.gz \
--home=/opt/sos-berlin.com/js7/agent \
--http-port=4445 \
--home-owner=scheduler \
--make-dirs \
--make-service \
--service-name=agent_4445 \
--exec-start=StartService
```

##### （３）ー２　パッケージをダウンロードしていない場合のインストール
以下は、「６．インストール準備 （１）インストールパッケージのダウンロード」にてパッケージをダウンロードしていない場合のインストール手順となります。
「--tarball」オプションの代わりに、「--release」を使用します。このオプションを指定することにより、SOSのWEBサイトから指定したリリースバージョンのパッケージをダウンロードし、インストールします。

```shell-session
$ cd /home/scheduler/work/
$ ./js7_install_agent.sh \
--release=2.6.1 \
--home=/opt/sos-berlin.com/js7/agent \
--http-port=4445 \
--home-owner=scheduler \
--make-dirs \
--make-service \
--service-name=agent_4445 \
--exec-start=StartService
```


各オプションの説明は以下になります。

- --tarball：JOCのパッケージを指定（--releaseを指定する際は不要）
- --release：SOSのWEBサイトからダウンロード/インストールするリリースバージョンを指定（--tarballを指定する際は不要）
- --home：　Agentのホームディレクトリを指定
- --http-port：　Agentのhttpポートを指定
- --home-owner：　Agentのホームディレクトリのオーナを指定
- --make-dirs：　各オプションで指定されたディレクトリが存在しない場合は作成
- --make-service：　systemdのサービスの作成
- --service-name：　systemdのサービス名（指定がない場合は、「js7_agent_XXXX.service」で作成）
- --exec-start：　Agentサービスの起動

上記のオプションの他、様々なオプションがあります。詳細は以下をご参照下さい。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+Installation+Script+-+js7_install_agent.sh

# ８．Controller/Agentの登録

インストール完了後、JOCのWebUIにログインし、Controller/Agentの登録を行います。
※本書では本項目は割愛します。
設定の詳細は以下の「9. コントローラー/エージェントの登録」をご参照ください。

https://qiita.com/satoruf/items/fa9846f4376d1a50a67e#9-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E7%99%BB%E9%8C%B2


# ９．備考

本書ではJS7 V.2.6.1のインストールスクリプトを使用してのjs7のインストール方法を記載しましたが、このインストールスクリプトは、バージョンにより、オプションの変更等があるため、必ず以下のサイトより、インストールする対象のバージョンの最新版のスクリプトをダウンロードして使用してください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Download

本書では、スタンドアロン構成でのインストールを行いましたが、このインストールスクリプトを使用することにより、有償ライセンスが必要となりますが、簡単にクラスタリング構成のJOC、Controller、Agentをインストールすることができます。
※有償ライセンスは、クラスタリング構成を行う際に必要となります。インストールスクリプト自体は、ライセンスの必要はありません。

また、PowerShellを使用したインストールスクリプトも用意されており、同じようにインストールスクリプトをダウンロードして実行することにより、JS7のインストールが可能です。

詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Automated+Installation+and+Update