1. JS7®JobSchedulerについて
JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しました。
JS7® の主な特徴は、下記となります。
- オープンソース(GNU Public License V.3)
- Linux/Windows版は、無料で使用可能。(但しクラスタリング構成は有償ライセンスが必要)
- 有償ライセンスを購入すれば、クラスタリング構成に加えて、障害対応、バグフィックス/ワークアラウンドの提供、新機能の早期提供、などのサービスが提供される。
- 有償ライセンスの機能が使用できる、30日間無償トライアルライセンスも提供されている。申し込みはこちらから
- 耐障害性
- 自律型アーキテクチャー(非同期疎結合)による高可用性
- データベース/ネットワーク障害時もジョブ実行継続
- 3秒以内のコントローラーフェイルオーバー
- 大規模環境対応
- 〜 20万ワークフロー
- 〜 100万ジョブ
- 〜 1,000エージェント
- 〜 20,000タスク並列実行
- 高性能
- ジョブ起動オーバーヘッドなし
- 1万タスクを5ミリ秒で同時起動
- 高セキュリティ
- JOC・コントローラー・エージェント間の全通信にクライアント・サーバー認証
- 定義ファイルにも証明書を付加
- 外部認証局(CA)をサポート
詳細な情報については、以下をご覧下さい。
- ナレッジベース(英語) 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
ジョブ・ワークフローの実行方法については、JS7® JobSchedulerクイックスタート、JS7® JobSchedulerワークフロー間連携を御覧ください。
2. JS7®の構成について
JS7®は以下のコンポーネントで構成されています。
- JOCコックピット
- WEB GUI/REST API
- ジョブ実行制御配布
- 履歴情報収集・保存
- ジョブ定義・リソースの作成
- ジョブ定義の管理とコントローラーへの配布
- クラスター制御、イベントキュー、ロギングなど
- コントローラー
- DB接続を廃止
- ジョブ定義をJOCコックピットから取得
- 実行履歴をJOCコックピットに送信
- 実行計画とジョブ定義をエージェントに配布
- 自律型エージェント
- コントローラーとの通信障害時にも自律的にジョブ実行制御
- エージェントクラスター内で実行計画とジョブ定義を同期
- 実行履歴をコントローラーに送信
3.稼働条件
V.2.3.1 (2022/5現在)
コントローラー/JOCコックピット
- CPU 2core<、メモリ8GB<、ディスク空き容量20GB<
- OracleJDK/openJDK 8 - 11, 17
- RHEL/CentOS 7< , Ubuntu, Oracle Linux, Amazon Linux
- Windows Server 2012/2016 /2019 (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/PKB/JS7+-+Platforms
データベースサポート
- Oracle® 12c, 18c, 19c
- SQL Server® 2012, 2014, 2017, 2019
- MariaDB® 10.x
- MySQL® 5.7, 8.0
- PostgreSQL® 10 - 13
- H2 1.4.200
詳細はこちらを参照(英語)
https://kb.sos-berlin.com/display/PKB/JS7+-+Database
4.インストール手順
本手順は、JS7®の機能確認を目的とした検証環境のスタンドアロン構成構築の手順です。
実業務では使用しないで下さい。
Dockerでのインストール手順はこちらを参照ください
https://qiita.com/satoruf/items/360fee5293611433ed33
Windiowsでのインストール手順はこちらを参照ください
https://qiita.com/Yoshitami/items/6804584592956a483364
詳細な手順はこちらを参照(英語)
https://kb.sos-berlin.com/display/PKB/JS7+-+Installation
(1)前提条件
本手順は以下の前提条件での手順です。
- JobSchedulerコントローラー・エージェント・JOCコックピット・データベースは同居する。
- CentOS 7.9 minimalインストール、標準レポジトリのみ
- SELinuxはdisabled、Firewallは停止されていること
- 以下手順はroot権限で実行
(2)EPELリポジトリのインストール
# yum install -y epel-release
# yum update -y
(3)JAVAインストール
# yum install java-11-openjdk
# java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)
(4)データベースインストール
本手順では、Postgres13をインストールします。
参考: https://www.postgresql.org/download/linux/redhat/
## Install the repository RPM:
# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
## Install PostgreSQL:
# yum install postgresql13-server
## Optionally initialize the database and enable automatic start:
# /usr/pgsql-13/bin/postgresql-13-setup initdb
# systemctl enable postgresql-13
# systemctl start postgresql-13
外部からの接続許可設定を行います。
# vi /var/lib/pgsql/13/data/pg_hba.conf
以下の部分を変更し、保存します。
# “local” is for Unix domain socket connections only
local all all trust # <- 変更
# IPv4 local connections:
host all all 0.0.0.0/0 trust # <- 変更
# IPv6 local connections:
host all all ::1/128 trust # <- 変更
# vi /var/lib/pgsql/13/data/postgresql.conf
listen_addresses = ‘*’ ←コメントを解除し、‘’内を * に変更
中略
port 5432 ←コメントを解除
サービスを起動します。
# systemctl restart postgresql-13
JobScheduler用データベースを作成します。
# psql -U postgres
postgres=# create database scheduler;
postgres=# ¥q
5. JobScheduler インストール準備
(1)インストール用ユーザー作成
JobSchedulerはroot権限ではインストールできないためインストール用ユーザー"scheduler"を作成し、以降は作成したユーザーで作業します。
# useradd scheduler -m -p scheduler
# passwd scheduler ##ユーザー scheduler のパスワードを設定
# visudo ##ユーザー schedulerにパスレスsudo権限を付加
下記を追加して保存
Defaults:scheduler !requiretty
scheduler ALL=(ALL) NOPASSWD: ALL
(2)インストーラのダウンロード
以下の作業はユーザー schedulerで作業します。
# su - scheduler
下記サイトから、インストーラをダウンロードできます。
http://www.sos-berlin.com/jobscheduler-downloads
Linux用とWindows用で、それぞれ下記のパッケージに分かれてますが
- Full Install(一括インストーラ)
- Update(アップデータ)
Update(アップデータ)は旧バージョンマスターをバージョンアップする場合使用しますが、Full Install( 一括インストーラ)でもバージョンアップは可能です。
本手順で使用するのは、
JobScheduler JOC Cockpit Linux Full Install
JobScheduler Controller Linux Full Install
JobScheduler Universal Agent Linux Full Install
になりますので、適当な場所にダウンロードし解凍します。
$ curl -O https://download.sos-berlin.com/JobScheduler.2.1/js7_joc_linux.2.X.X.tar.gz
$ curl -O https://download.sos-berlin.com/JobScheduler.2.1/js7_controller_unix.2.X.X.tar.gz
$ curl -O https://download.sos-berlin.com/JobScheduler.2.1/js7_agent_unix.2.X.X.tar.gz
6. JOCインストール
ダウンロードしたjs7_joc_linux.2.X.X.tar.gzを適当な場所に解凍します。
$ tar xvzf js7_joc_linux.2.X.X.tar.gz
$ cd joc_linux.2.X.X
(1)インストール設定ファイルの編集
本手順ではGUIインストーラを使用せずに、CLIでインストールしますのでインストール用設定ファイルを編集します。
$ vi joc_install.xml
プログラムとのインストール先とjettyのベースディレクトリをフルパスで指定します。
Linuxの場合は、プログラムは"/opt/sos-berlin.com/js7/joc"、jettyのベースディレクトリは ”/home/[インストールユーザー名]/sos-berlin.com/js7/joc” とします。インストール用ユーザー名は、本手順では"scheduler"です。
<!-- SELECT THE INSTALLATION PATH
The path must be absolute!
For example:
/opt/sos-berlin.com/js7/joc on Unix
C:\Program Files\sos-berlin.com\js7\joc on Windows -->
<installpath>/opt/sos-berlin.com/js7/joc</installpath>
中略
<!-- Path to Jetty base directory
For example:
/home/[user]/sos-berlin.com/js7/joc on Unix
C:\ProgramData\sos-berlin.com\js7\joc on Windows -->
<entry key="jettyBaseDir" value="/home/scheduler/sos-berlin.com/js7/joc"/>
JOCコックピットが使用するレポーティングデータベース接続の設定をします。
使用するデータベースを指定します。本手順ではPostgresを使用するので"pgsql"とします。
<!-- Reporting Database Configuration -->
<!-- Choose the database management system. Supported values are 'mysql' for MySQL,
'oracle' for Oracle, 'mssql' for MS SQL Server, 'pgsql' for PostgreSQL. -->
<entry key="reporting.databaseDbms" value="pgsql"/>```
<!-- Enter the name or ip address of the database host -->
<entry key="reporting.databaseHost" value="localhost"/> ## DB稼働ホスト名またはIPアドレス
<!-- Enter the port number for the database instance. Default ports are for MySQL 3306,
Oracle 1521, MS SQL Server 1433, postgreSQL 5432. -->
<entry key="reporting.databasePort" value="5432"/> ## DB接続ポート番号
<!-- Enter the schema -->
<entry key="reporting.databaseSchema" value="scheduler"/> ## DB名
<!-- Enter the user name for database access -->
<entry key="reporting.databaseUser" value="postgres"/> ## DB接続ユーザー名
<!-- Enter the password for database access -->
<entry key="reporting.databasePassword" value="postgres"/> ## DB接続パスワード
(2)インストール実行
joc_install.xmlを保存後、インストーラを実行します。
$ ./setup.sh joc_install.xml
sudo -E java -jar ./joc.2.X.X.jar joc_install.xml
インストールが開始し、メッセージが表示されます。
Starting Jetty: . OK 2021年 10月 22日 金曜日 18:19:36 JST
The daemon "joc" has been started.
[ Processing finished ]
[ Writing the uninstaller data ... ]
[ Automated installation done ]```
と表示され、プロンプトに戻ったらインストールが完了です。
ブラウザからhttp://ホストアドレス:4446
にアクセスし、下記画面が表示されればOKです。
(3)起動と停止
JOCコックピットの起動と停止は、以下のコマンドで実行します。
起動:systemctl start joc.service
停止:systemctl stop joc.service
ステータス確認:systemctl status joc.service
(4)ログファイル
JOCコックピットのログファイルは、以下のディレクトリに保存されます。
/var/log/sos-berlin.com/js7/joc
インストールログ:Install_V2.X.X_YYYYMMDDHHMMSS_XXXXXXXXXXXX.log
JOCログ:joc.log
Jettyログ:jetty.log
操作ログ:auditLog.log
(5)アンインストール
# /opt/sos-berlin.com/js7/joc/Uninstaller/uninstall.sh
7. コントローラーインストール
(1)コントローラの配置と起動
ダウンロードしたjs7_controller_unix.2.X.X.tar.gzを適当な場所に解凍し、パーミッションを与えます。
$ sudo tar xvzf js7_controller_unix.2.X.X.tar.gz -C /opt/sos-berlin.com/js7/
$ sudo chown -R scheduler. /opt/sos-berlin.com/js7/controller/
##起動スクリプトをコピー
$ cd /opt/sos-berlin.com/js7/controller/bin
$ cp -p controller_instance.sh-example controller_instance.sh
##コントローラ起動
$ ./controller_instance.sh start
##起動確認
$ ./controller_instance.sh status
{"id":"controller","version":"2.X.X (2021-XX-XX)","buildId":"5Q-1Y30tR36bnaJ2v-1-_g","initiallyStartedAt":1635845202692,"startedAt":1635845197232,"totalRunningTime":12.627,"orderCount":0,"system":{"hostname":"js7centos7","distribution":"CentOS Linux release 7.9.2009 (Core)","cpuModel":"Common KVM processor","mxBeans":{"operatingSystem":{"availableProcessors":4,"systemLoadAverage":0.21}}},"java":{"version":"11.0.13+8-LTS","memory":{"maximum":524288000,"total":134217728,"free":87320592},"systemProperties":{"java.vendor":"Red Hat, Inc.","os.arch":"amd64","java.runtime.name":"OpenJDK Runtime Environment","os.version":"3.10.0-957.el7.x86_64","os.name":"Linux","java.vm.name":"OpenJDK 64-Bit Server VM","java.version":"11.0.13"}}}
##起動が確認できたら、一旦停止しておきます
$ ./controller_instance.sh stop
(2)自動起動の設定
サービスを登録し、自動起動に設定します。
https://kb.sos-berlin.com/pages/viewpage.action?pageId=68592644
$ sudo vim /usr/lib/systemd/system/controller.service
[Unit]
Description=SOS JS7 Controller -id=controller
After=syslog.target
After=network.target
[Service]
# Set JAVA_HOME environment variable if necessary
# Environment="JAVA_HOME=/path/to/java_home"
Type=forking
KillMode=process
#default <JS7_CONTROLLER_PID_FILE_DIR> = /opt/sos-berlin.com/js7/controller/var/logs
PIDFile=/opt/sos-berlin.com/js7/controller/var/logs/controller.pid
ExecStart=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh start
ExecStop=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh stop
ExecReload=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh restart
User=scheduler
StandardOutput=syslog+console
StandardError=syslog+console
TimeoutStopSec=60
TasksMax=infinity
[Install]
WantedBy=multi-user.target
サービスを登録し、起動を確認。
$ sudo systemctl enable controller.service
$ sudo systemctl daemon-reload
$ sudo systemctl start controller.service
$ sudo systemctl status controller.service
● controller.service - SOS JS7 Controller -id=controller
Loaded: loaded (/usr/lib/systemd/system/controller.service; enabled; vendor preset: disabled)
Active: active (running) since 火 2021-11-02 18:29:50 JST; 8s ago
Process: 10804 ExecStart=/opt/sos-berlin.com/js7/controller/bin/controller_instance.sh start (code=exited, status=0/SUCCESS)
Main PID: 10841 (java)
CGroup: /system.slice/controller.service
├─10840 /bin/sh /opt/sos-berlin.com/js7/controller/bin/controller_watchdog.sh -controller
└─10841 /usr/bin/java -DJS7.Controller=controller -Dfile.encoding=UTF-8 -Xmx500m -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSele...
11月 02 18:29:50 js7centos7 systemd[1]: Starting SOS JS7 Controller -id=controller...
11月 02 18:29:50 js7centos7 systemd[1]: Can't open PID file /opt/sos-berlin.com/js7/controller/var/logs/controller.pid (yet?) after start: No such file or directory
11月 02 18:29:50 js7centos7 systemd[1]: controller.service: Supervising process 10841 which is not our child. We'll most likely not notice when it exits.
11月 02 18:29:50 js7centos7 systemd[1]: Started SOS JS7 Controller -id=controller.
(3)起動と停止
コントローラーの起動と停止は、以下のコマンドで実行します。
起動:systemctl start controller.service
停止:systemctl stop controller.service
ステータス確認:systemctl status controller.service
(4)ログの設定
ログの場所も/var/log下にリンクしておきます。
$ sudo ln -s /opt/sos-berlin.com/js7/controller/var/logs /var/log/sos-berlin.com/js7/controller
$ ll /var/log/sos-berlin.com/js7/controller/
合計 72
-rw-rw-r--. 1 scheduler scheduler 0 11月 2 18:26 controller-debug.log
-rw-rw-r--. 1 scheduler scheduler 65518 11月 2 18:33 controller.log
-rw-rw-rw-. 1 scheduler scheduler 6 11月 2 18:32 controller.pid
-rw-rw-r--. 1 scheduler scheduler 45 11月 2 18:32 watchdog.log
8. エージェントインストール
(1)エージェントの配置と起動
ダウンロードしたjs7_agent_unix.2.X.X.tar.gzを適当な場所に解凍し、パーミッションを与えます。
$ sudo tar xvzf js7_agent_unix.2.X.X.tar.gz -C /opt/sos-berlin.com/js7/
$ sudo chown -R scheduler. /opt/sos-berlin.com/js7/agent
##起動スクリプトをコピー
$ cd /opt/sos-berlin.com/js7/agent/bin
$ cp -p agent_instance.sh-example agent_4445.sh
##起動確認
$ ./agent_4445.sh start
$ ./agent_4445.sh status
{"version":"2.X.X (2021-XX-XX)","buildId":"5Q-1Y30tR36bnaJ2v-1-_g","startedAt":1635845967368,"isTerminating":false,"system":{"hostname":"js7centos7","distribution":"CentOS Linux release 7.9.2009 (Core)","cpuModel":"Common KVM processor","mxBeans":{"operatingSystem":{"availableProcessors":4,"systemLoadAverage":0.08}}},"java":{"version":"11.0.13+8-LTS","memory":{"maximum":2092957696,"total":204472320,"free":96301744},"systemProperties":{"java.vendor":"Red Hat, Inc.","os.arch":"amd64","java.runtime.name":"OpenJDK Runtime Environment","os.version":"3.10.0-957.el7.x86_64","os.name":"Linux","java.vm.name":"OpenJDK 64-Bit Server VM","java.version":"11.0.13"}}}
##起動確認できたら、一旦停止しておきます
$ ./agent_4445.sh stop
(2)自動起動の設定
サービスを登録し、自動起動に設定します。
https://kb.sos-berlin.com/pages/viewpage.action?pageId=68592644
sudo vim /usr/lib/systemd/system/agent_4445.service
[Unit]
Description=SOS JS7 Agent -port=4445
After=syslog.target
After=network.target
[Service]
# Optionally set JAVA_HOME environment variable if not specified with the Agent's Instance Start Script
# Environment="JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/"
# Optionally set JAVA_OPTIONS
# Environment="JAVA_OPTIONS='-Djavax.net.debug=ssl'"
Type=forking
KillMode=process
# default <JS7_AGENT_PID_FILE_DIR> = <INSTALL_PATH>/var_<JS7_AGENT_HTTP_PORT>/logs
PIDFile=/opt/sos-berlin.com/js7/agent/var_4445/logs/agent.pid
ExecStart=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh start
ExecStop=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh stop
ExecReload=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh restart
User=scheduler
StandardOutput=syslog+console
StandardError=syslog+console
TimeoutStopSec=60
TasksMax=infinity
[Install]
WantedBy=multi-user.target
サービスを登録し、起動を確認。
$ sudo systemctl enable agent_4445.service
$ sudo systemctl start agent_4445.service
$ sudo systemctl status agent_4445.service
● agent_4445.service - SOS JS7 Agent -port=4445
Loaded: loaded (/usr/lib/systemd/system/agent_4445.service; enabled; vendor preset: disabled)
Active: active (running) since 火 2021-11-02 19:55:34 JST; 8s ago
Process: 16274 ExecStart=/opt/sos-berlin.com/js7/agent/bin/agent_4445.sh start (code=exited, status=0/SUCCESS)
Main PID: 16333 (java)
CGroup: /system.slice/agent_4445.service
├─16332 /bin/sh /opt/sos-berlin.com/js7/agent/bin/agent_watchdog.sh -4445
└─16333 /usr/bin/java -DJS7.Agent=4445 -Xms100m -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j2.asyncLoggerWaitStra...
11月 02 19:55:34 js7centos7 systemd[1]: Starting SOS JS7 Agent -port=4445...
11月 02 19:55:34 js7centos7 systemd[1]: Can't open PID file /opt/sos-berlin.com/js7/agent/var_4445/logs/agent.pid (yet?) after start: No such file or directory
11月 02 19:55:34 js7centos7 systemd[1]: agent_4445.service: Supervising process 16333 which is not our child. We'll most likely not notice when it exits.
11月 02 19:55:34 js7centos7 systemd[1]: Started SOS JS7 Agent -port=4445.
(3)起動と停止
コントローラーの起動と停止は、以下のコマンドで実行します。
起動:systemctl start agent_4445.service
停止:systemctl stop agent_4445.service
ステータス確認:systemctl status agent_4445.service
(4)ログの設定
ログの場所も/var/log下にリンクしておきます。
$ sudo mkdir -p /var/log/sos-berlin.com/js7/agent
$ sudo ln -s /opt/sos-berlin.com/js7/agent/var_4445/logs /var/log/sos-berlin.com/js7/agent/agent_4445
$ ll /var/log/sos-berlin.com/js7/agent/agent_4445/
合計 20
-rw-rw-r--. 1 scheduler scheduler 0 11月 2 18:38 agent-debug.log
-rw-rw-r--. 1 scheduler scheduler 10409 11月 2 19:55 agent.log
-rw-rw-rw-. 1 scheduler scheduler 6 11月 2 19:55 agent.pid
-rw-rw-r--. 1 scheduler scheduler 40 11月 2 19:55 watchdog.log
9. コントローラー/エージェントの登録
ブラウザから
http://ホスト名orIPアドレス:4446
にアクセスし
account: root
password: root
でログインすると、コントローラ登録画面が表示されます。
スタンドアロンタイプを選択し、URLはhttp://[コントローラーホスト名orIPアドレス]:[ポート番号]
を入力し登録します。
次にJobSchedulerメニューから"Add Agent"を選択
エージェント名で登録し、URLはhttp://[エージェントホスト名orIPアドレス]:[ポート番号]
を入力し登録します。
エイリアス名とは、開発環境と本番環境でエージェント名が異なっても、ジョブ定義では共通のエイリアス名を使用するとワークフロージョブの定義内容を変える必要がありません。
最後にアカウントメニューのProfileを選択し
言語やタイムゾーンなどを設定
ダッシュボードを選択すると、コントローラーやエージェントの状態が表示されます。
10. バージョンアップ及びパッチアップデート方法
JobSchedulerのバージョンアップには、アップデートとアップグレードがあります。
アップグレードは、マイナーリリースのバージョンアップ(V.2.1.x -> V.2.2.x)であり、
アップデートは、メンテナンスリリースのバージョンアップ(V.2.x.0 -> V.2.x.1)になります。
パッチアップデートは、SOS社の変更管理システムに登録された特定のバグや脆弱性に対するパッチ提供の適用です。
アップグレードの場合、DBのスキーマや設定の取り扱いが変わる可能性がありますので、初期インストールと同じ方法となりますが、アップデート及びパッチアップデートの場合自動更新スクリプトが提供されています。
JOCコックピット、コントローラー、エージェント用の自動更新スクリプトはこちらからjs7_install_joc|controller|agent.shを別途ダウンロードできます。
JOCコックピットの場合は、初回インストール時のjoc_install.xmlファイルが残っていることが前提条件となりますが、これらのスクリプトを使用することによって、パッケージダウンロード/サービス停止/サービス再起動などの一連の作業を1行のコマンドで実行できます。
スクリプトをAnsible®、Puppet®、Chef®などの自動化ツールはもちろん、JobSchedulerのジョブとして使用し、多数のコンポーネント更新を自動化することが可能です。