お金をかけずにサーバーの勉強をしよう

JS7インストール 1

2024年8月27日
メニューへ戻る

OSSでジョブをビジュアルに管理したかった。

日々のジョブ管理において、業務では日立JP1/AJSNRI千手を使っていまして、これらは素晴らしい製品なんですが、それ故に中々のお値段がいたします。

小さい会社さんだと中々導入に踏み切れないのではないかと思います。

そんな訳で無料で使える OSSのジョブスケジューラーがないかな〜と探していて、こちらを見つけました。

JS7

ドイツのSOS合同会社(Software- und Organisations-Service GmbH)が作っていまして、日本ではOSSラボ株式会社さんが正規代理店として日本語で紹介をしています。

クラスタ機能やセキュリティパッチの提供などは有償サービスとなっていますが、利用自体は無料ですので、まずは味わってみようと思います。

これから JP1/AJSや千手でのジョブ管理をしようと思うけど、どういう運用になるのかイメージが湧かないという方にも良いかも知れません。

以前から OSSのジョブスケジューラーとして「 JobScheduler」というのがありました。
JS7はこれが Ver.2にメジャーバージョンアップとともにリブランドしたものと Wikiにありました。


1.ジョブ管理ツールの構成

ジョブ管理システムの構成は3つの要素があって、こんな感じになっています。
ジョブ管理システム構成図

これは JP1/AJSや千手も名こそ違えど同じ構成になっています。
JP1/AJS・千手ともに管理GUIには専用のクライアントソフトを使うのが基本になっていて基本的に JS7も同じですが Controllerがあるのが特徴です。
JS7の管理GUIは WEBベースだけですね。
まずはこれを覚えておきましょう。
JP1/AJSと千手の例


2.環境

LinuxとWindowsの両方で動きますが、ここでは以下の構成でいきます。

役割OSマシン名IPアドレス
1ManagerUbuntu Server 24.04js7controller192.168.1.104
2AgentUbuntu Server 24.04js7agent192.168.1.105
3DBUbuntu Server 24.04js7db192.168.1.107
4JOC CockpitUbuntu Server 24.04js7cockpit192.168.1.108
5管理GUI利用Lubuntu 24.04Lubuntu2404DHCP

データベースは PostgreSQL 16にしてみます。

この手のソフトの真骨頂は Agentが多数あり、更に Linuxと Windowsが混在しているシステムなんですが、何台あろうが OSが違おうがこの構成の応用になります。

Ubuntu Serverのインストールについては「Ubuntu 24.04 Server インストール」に書いています。

Ubuntu Serverが 4台できていて、LinuxのクライアントPCがあるところからスタートします。

全部 Linuxでやりますが、Windowsでも基本的に同じことです。

2024年8月27日での JS7の最新バージョンは 2.7.1です。

JS7は Javaでできていますので、上記のうち 1・2・4の OSにはみな OpenJDK 21をインストールしてあります。
OpenJDKのインストールについては「Java SE Development Kit (JDK) 21 インストール」に書いています。


3.ダウンロード

ダウンロードはこちらから。
JobScheduler Downloads

JS7での名称はこのようになっています。

役割名称
ManagerJS7 JobScheduler Controller
AgentJS7 JobScheduler Universal Agent
管理GUI利用JS7 JobScheduler JOC Cockpit

それぞれダウンロードします。

JOC Cockpitがこちら。
JS7ダウンロード 1

Controllerがこちら。
JS7ダウンロード 2

Universal Agentがこちら。
JS7ダウンロード 3

結果以下を入手しました。
[js7_agent_unix.2.7.1.tar.gz]ファイル
[js7_controller_unix.2.7.1.tar.gz]ファイル
[js7_joc_linux.2.7.1.tar.gz]ファイル


4.コントローラーの環境構築

[js7controller]サーバーでの作業になります。

絵で言うとここ。
Controller構築

一応以下のリンクがインストール用のドキュメントなんですが、余り多くを書いていないのと、後述する systemdでの自動起動については言及してなかったので、ここでは勝手な手順でやっています。
JS7 - Controller - Headless Installation on Linux and Windows

必須ではないですが、専用に [js7]ユーザー・[js7]グループを作ってそれに JS7を実行させることにしました。

ユーザー・グループを作成します。

ssubro@js7controller:~$ sudo adduser js7
info: ユーザ `js7' を追加しています...
info: Selecting UID/GID from range 1000 to 59999 ...
info: 新しいグループ `js7' (1001) を追加しています...
info: Adding new user `js7' (1001) with group `js7 (1001)' ...
info: ホームディレクトリ `/home/js7' を作成しています...
info: `/etc/skel' からファイルをコピーしています...
新しいパスワード: 新規パスワードを入れる
新しいパスワードを再入力してください: パスワードをもう一回
passwd: パスワードは正しく更新されました
js7 のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        フルネーム []:[Enter]キー
        部屋番号 []:[Enter]キー
        職場電話番号 []:[Enter]キー
        自宅電話番号 []:[Enter]キー
        その他 []:[Enter]キー
以上で正しいですか? [Y/n] Y
info: Adding new user `js7' to supplemental / extra groups `users' ...
info: ユーザ `js7' をグループ `users' に追加しています...

ユーザー・グループができましたので、[js7]ユーザーでログインし直しました。

[js7]ユーザーのホームディレクトリはこんな感じです。
ダウンロードした Controllerのファイルを置いておきました。

js7@js7controller:~$ ls -la
合計 93084
drwxr-x--- 3 js7  js7      4096  8月 20 06:40 .
drwxr-xr-x 4 root root     4096  8月 20 06:33 ..
-rw------- 1 js7  js7         5  8月 20 06:40 .bash_history
-rw-r--r-- 1 js7  js7       220  8月 20 06:33 .bash_logout
-rw-r--r-- 1 js7  js7      3771  8月 20 06:33 .bashrc
drwx------ 2 js7  js7      4096  8月 20 06:39 .cache
-rw-r--r-- 1 js7  js7       807  8月 20 06:33 .profile
-rw-rw-r-- 1 js7  js7  95289300  8月 20 06:40 js7_controller_unix.2.7.1.tar.gz

Controllerのファイルは [tar.gz]形式の圧縮ファイルですので、解凍しながら展開します。

js7@js7controller:~$ tar -xzvf js7_controller_unix.2.7.1.tar.gz
〜〜〜 省略 〜〜〜

解凍・展開ができまして [controller]ディレクトリができました。

js7@js7controller:~$ ls -ld controller
drwxrwx--- 5 js7 js7 4096  7月  9 04:32 controller

[controller/bin]ディレクトリにあるファイルが以下のようになっていました。

js7@js7controller:~$ ls -l controller/bin
合計 48
-rwxrwx--- 1 js7 js7   643  7月  9 04:32 anonymize-logs.sh
-rw-rw---- 1 js7 js7  2276  7月  9 04:32 controller.service-example
-rwxrwx--- 1 js7 js7 27302  7月  9 04:32 controller.sh
-rwxrwx--- 1 js7 js7  5155  7月  9 04:32 controller_instance.sh-example
-rwxrwx--- 1 js7 js7  2911  7月  9 04:32 controller_watchdog.sh

インストールドキュメントでは [controller_instance.sh-example]ファイルをコピーして [controller_instance.sh]ファイルを作成し、これを実行するように書いてあります。

js7@js7controller:~$ cd controller/bin

js7@js7controller:~/controller/bin$ cp controller_instance.sh-example controller_instance.sh

js7@js7controller:~/controller/bin$ ls -l controller_instance.sh
-rwxrwx--- 1 js7 js7 5155  8月 21 06:20 controller_instance.sh

[controller_instance.sh]ファイルができましたので、当環境に合わせて修正しようと思いましたが、一通りデフォルト設定で良さげなのでそのままにしました。
(待受ポート番号とかPIDファイル名とか色々変えられます)

ファイルの実行権限もついているので、このままで良いでしょう。

[controller.service-example]ファイルの中身を見てみますと、これは OS起動時に自動起動させるための systemd用の サービスユニットファイルでありました。

この手のソフトの運用では常に起動しておくものと考えますので、こちらの方式で起動しようと思います。

[controller.service-example]ファイルをコピーして [controller.service]ファイルを作ります。

js7@js7controller:~/controller/bin$ cp controller.service-example controller.service

js7@js7controller:~/controller/bin$ ls -l controller.service
-rw-rw---- 1 js7 js7 2276  8月 21 06:38 controller.service

[controller.service]ファイルができましたので、当環境に合わせて若干修正します。
ピンク色が修正した箇所です。
(分かりやすくするため #で始まるコメント行は削除しています)

[Unit]
Description=SOS JS7 Controller -id=JS7_TEST
After=syslog.target
After=network.target

[Service]
Type=forking
KillMode=process
PIDFile=/home/js7/controller/controller.pid
ExecStartPost=/bin/sleep 1
ExecStart=/home/js7/controller/bin/controller_instance.sh start
ExecStop=/home/js7/controller/bin/controller_instance.sh stop
ExecReload=/home/js7/controller/bin/controller_instance.sh restart
User=js7
StandardOutput=journal+console
StandardError=journal+console
TimeoutStopSec=60
TasksMax=infinity

[Install]
WantedBy=multi-user.target

できあがった [controller.service]ファイルを systemd用の [/usr/lib/systemd/system]ディレクトリにコピーしたいんですが、このディレクトリは [root]権限がないと書き込めませんので、sudoコマンドを使うため、もう一つターミナルを開いて管理者ユーザーの [subro] でやります。

subro@js7controller:~$ sudo cp /home/js7/controller/bin/controller.service /usr/lib/systemd/system

subro@js7controller:~$ ls -l /usr/lib/systemd/system/controller.service
-rw-r----- 1 root root 541  8月 21 06:54 /usr/lib/systemd/system/controller.service

ファイルのオーナー・グループ・パーミッションともこのままで良さそうです。

[controller.service]ファイルが OS起動時の自動起動に含まれるように有効化します。

subro@js7controller:~$ sudo systemctl enable controller.service
Created symlink /etc/systemd/system/multi-user.target.wants/controller.service → /usr/lib/systemd/system/controller.service.

良さげですので、試しに OSを再起動してみます。

subro@js7controller:~$ sudo reboot

Broadcast message from root@js7controller on pts/2 (Wed 2024-08-21 07:01:39 JST):

The system will reboot now!

再起動完了後に改めて [js7]ユーザーでログインして、さっき作った [controller.service]ファイルで上手く起動しているか確認します。

js7@js7controller:~$ ystemctl status controller
● controller.service - SOS JS7 Controller -id=JS7_TEST
     Loaded: loaded (/usr/lib/systemd/system/controller.service; enabled; preset: enabled)
     Active: activating (start-post) since Wed 2024-08-21 07:21:48 JST; 21s ago
    Process: 850 ExecStart=/home/js7/controller/bin/controller_instance.sh start (code=exited, status=0/SUCCESS)
    Process: 1129 ExecStartPost=/bin/sleep 1 (code=exited, status=0/SUCCESS)
      Tasks: 34
     Memory: 331.8M (peak: 332.2M)
        CPU: 12.763s
     CGroup: /system.slice/controller.service
             ├─1127 /bin/sh /home/js7/controller/bin/controller_watchdog.sh -controller
             └─1130 /usr/bin/java -DJS7.Controller=controller -Xmx500m -Dfile.encoding=UTF-8 -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -Dlog4j2.async>

 8月 21 07:21:50 js7controller controller_instance.sh[1127]: ...JS7 Controller(controller) is started with pid=1130!
 8月 21 07:21:50 js7controller controller_instance.sh[1127]: ...see log file /home/js7/controller/var/logs/controller.log
 8月 21 07:21:50 js7controller controller_instance.sh[1127]: ...watchdog for pid 1130 is started
 8月 21 07:21:50 js7controller controller_instance.sh[1127]: Hit ENTER to return to command prompt.
Warning: journal has been rotated since unit was started and some journal files were not opened due to insufficient permissions, output may be incomplete.

起動していました。\(^o^)/


5.JS7 Universal Agentとの通信準備

これは必須ではないのですが、私の環境では他サーバーとの連携においてなるべくマシン名を使っていきたいので、[js7controller]サーバーの [/etc/hosts]ファイルに以下の行を追加しました。

192.168.1.105   js7agent js7agent.subrohouse.internal



JS7インストール 2」につづきます。


==========
思いの他長くなってしまったので、別ページで続きをすることにします。

当初はデータベースを JOC Controllerのマシンに同居させるつもりでしたが、本気の環境では JOC Controllerも冗長化するようですので(無償版ではできない)、データベースは独立させることにしました。