JobScheduler
2014/05/04更新
対応バージョン: 1.6.4119
公式サイト
Software Open Source - JobScheduler
システム構成
JobSchedulerにはサーバ1台によるスタンドアローン環境から大規模なクラスタ環境まで様々な構成がとれるが、ここではシンプルにスタンドアローン環境を構築する。
準備
あらかじめインストールしておくもの
MySQL (他のDBMSも利用可能。サポートするDBMSは公式サイトを参照)
JDBCドライバ(MySQLの場合はlibmysql-java)
Java実行環境
導入OS
Ubuntu 13.04
MySQL事前準備
まずMySQLの準備を行う。
最初にサーバの文字コードをUTF-8に変更する。my.cnfの[client]、[mysqld]それぞれのセクションに以下の行を追加してサーバを再起動する(すでに設定されていればこの作業は不要)。
% sudo vi /etc/mysql/my.cnf : [client] : default-character-set=utf8 : [mysqld] : character-set-server = utf8 : % sudo service mysql restart
続いてJobScheduler専用のDBとアカウントを作成する。
ここでは以下の通りとする。
DB: scheduler
アカウント: scheduler
パスワード: scheduler_pass
% mysqladmin create scheduler % mysql mysql> GRANT ALL PRIVILEGES ON scheduler.* TO scheduler@localhost IDENTIFIED BY 'scheduler_pass' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
作成したアカウントでDBに接続してみる。以下のように出力されればOKである。
% mysql --user=scheduler --password=scheduler_pass scheduler mysql> status -------------- mysql Ver 14.14 Distrib 5.5.34, for debian-linux-gnu (i686) using readline 6.2 Connection id: 65 Current database: scheduler Current user: scheduler@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.34-0ubuntu0.13.04.1-log (Ubuntu) Protocol version: 10 Connection: 127.0.0.1 via TCP/IP Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 19 hours 54 min 49 sec Threads: 1 Questions: 532 Slow queries: 510 Opens: 222 Flush tables: 1 Open tables: 41 Queries per second avg: 0.007 -------------- mysql> exit Bye
MySQLの準備ができたらJobSchedulerのインストールを行う。
配布ファイル展開
% tar xvf jobscheduler_linux-x86.1.6.4119.tar.gz % cd jobscheduler.1.6.4119
インストール
インストーラ内部でsudoによりroot権限になるのでこの権限を持っているアカウントで作業する。
% ./setup.sh sudo -E java -jar ./jobscheduler_linux-x64.jar :
以降、GUI画面で設定する。CUIで設定する方法もあるが、ここでは割愛する。
インストーラの言語設定
「eng」のまま「OK」
Welcome画面
「Next」
ライセンス選択画面
希望するライセンス種別を選択して「Next」(ここではデフォルトのGPL 2.0を選択)
ライセンス許諾
「I accept...」を選択して「Next」
インストールパス
希望するパスを指定して「Next」(ここでは/usr/local/jobscheduler)
設定ファイル、及びログファイルの格納パス
希望するパスを指定して「Next」(ここでは/var/lib/jobscheduler)
インストールするコンポーネント
希望するコンポーネントを指定して「Next」(ここでは全て選択)
ジョブスケジューラのID・実行ホスト・接続ポート・HTTP[S]ポート・許可ホスト指定
以下を変更し、それ以外はデフォルトのまま「Next」
・JobScheduler ID: 任意 (ここではscheduler)
・JobScheduler Host: localhost
・Allowed Host: localhost
システム構成
希望する構成を指定して「Next」(ここではサーバ1台で全てを構成する「standalone」を選択)
メール設定
メール通知に必要なSMTPサーバ・ポート・SMTP認証用アカウント・メールアカウントを指定して「Next」(ここではlocalhostのschedulerアカウントを設定)
メール通知とイベントハンドラ設定
ジョブの結果によってエラー・警告・成功それぞれの場合でメール通知を行うか指定する。また、イベントをトリガにしたジョブを使用したい場合は「Configure JobScheduler as event handler」にチェックを入れる(この機能を後で有効にする場合、再インストールが必要になる場合があるのでひとまずチェックを入れる)。設定が終わったら「Next」
新しいバージョンのリリースチェックを行うタイミング
希望するタイミングを指定して「Next」。特にこだわりがなければデフォルトのままでよい。また自動ダウンロードをしたい場合は「with automatic download」にチェックを入れる
DBMS選択
希望するDBMSを選択して「Next」。ここではデフォルトのMySQLを選択する。尚、JobSchedulerの動作に必要なテーブルを自動生成するため、「Yes, the database tables should be created...」のチェックは入れたままにしておく
DBMS接続設定
DBMSに接続するための情報を指定する。先に作成したDBとアカウント情報を入力して「Next」。またJDBCドライバを使用するので「Yes, the MariaDB JDBC Driver should be used.」のチェックは入れたままにしておく
cron設定
scheduler_cron_adapterジョブを使用してcronジョブをJobSchedulerで実行する場合は各項目を設定するが、scheduler_cron_adapterジョブを使用しない場合はデフォルトのままで「Next」
インストール
インストールが始まる。終わったら「Next」
各種設定
画面に以下のようなログが表示され、各種設定が行われる。終わったら「Next」
+------------------------------------------------------------------- | Create some symlinks +------------------------------------------------------------------- ... trying to create symlink /var/lib/jobscheduler/scheduler/scheduler_home -> /usr/local/jobscheduler/scheduler ... done ... trying to create symlink /usr/local/jobscheduler/scheduler/scheduler_data -> /var/lib/jobscheduler/scheduler ... done ... create symlinks for jetty ... trying to create symlink /usr/local/jobscheduler/scheduler/operations_gui/scheduler_home/doc -> /usr/local/jobscheduler/scheduler/doc ... done ... trying to create symlink /usr/local/jobscheduler/scheduler/operations_gui/scheduler_data/jobs -> /var/lib/jobscheduler/scheduler/jobs ... done ... trying to create symlink /usr/local/jobscheduler/scheduler/operations_gui/scheduler_data/config -> /var/lib/jobscheduler/scheduler/config ... done ... trying to create symlink /var/lib/jobscheduler/scheduler/logs -> /var/log/sos-berlin.com/jobscheduler/scheduler ... done ... trying to create symlink /usr/local/jobscheduler/scheduler/lib/libstdc++.so.6 -> /usr/local/jobscheduler/scheduler/lib/libstdc++.so.6.0.8 ... done ... trying to create symlink /usr/local/jobscheduler/scheduler/lib/libgcc_s.so -> /usr/local/jobscheduler/scheduler/lib/libgcc_s.so.1 ... done ... the perl version is 5.14.2 ... trying to create symlink /usr/local/jobscheduler/scheduler/lib/libsosperlscript.so -> /usr/local/jobscheduler/scheduler/lib/libsosperlscript.5.18.2.so ... done +------------------------------------------------------------------- | Configuration of ./bin/jobscheduler_environment_variables.sh +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Configuration of ./config/scheduler.xml +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Configuration of ./config/jetty.xml +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Configuration of ./config/sos.ini +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Configuration of ./config/factory.ini +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Configuration of ./config/operations_gui/custom.js +------------------------------------------------------------------- ... done +------------------------------------------------------------------- | Update jar files in ./lib +------------------------------------------------------------------- ... trying to delete obsolete jar files ... nothing to do ... trying to install new jar files ... trying to update 3party jar files ... done +------------------------------------------------------------------- | Initial database +------------------------------------------------------------------- ... the database management system is MySQL ... create database tables which not already exist ... file successfully processed: /usr/local/jobscheduler/scheduler/db/mysql/scheduler.sql ... file successfully processed: /usr/local/jobscheduler/scheduler/db/mysql/sosftphistory.sql ... file successfully processed: /usr/local/jobscheduler/scheduler/db/mysql/sosdailyschedule.sql ... file successfully processed: /usr/local/jobscheduler/scheduler/db/mysql/scheduler_events.sql ... file successfully processed: /usr/local/jobscheduler/scheduler/db/mysql/scheduler_loganalyser.sql ... insert initial rows into database tables ... done +------------------------------------------------------------------- | Change owner in /var/lib/jobscheduler/scheduler to neo +------------------------------------------------------------------- ... the user group of "neo" is "neo". ... done +------------------------------------------------------------------- | Start Job Scheduler +------------------------------------------------------------------- linux-gate.so.1 => (0xb7719000) libjobscheduler-engine.so => /usr/local/jobscheduler/scheduler/lib/libjobscheduler-engine.so (0xb70b0000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7082000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7067000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7062000) libstdc++.so.6 => /usr/local/jobscheduler/scheduler/lib/libstdc++.so.6 (0x069b2000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb701f000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6e6a000) libgcc_s.so.1 => /usr/local/jobscheduler/scheduler/lib/libgcc_s.so.1 (0x00b18000) /lib/ld-linux.so.2 (0xb771a000) Starting JobScheduler...
インストール完了
以下の画面が表示されたらインストール成功。最後に「Done」
インストール物 (man,infoは除く)
/usr/local/jobscheduler/*/* /var/lib/jobscheduler/*/*
/usr/local/jobscheduler/bin配下のファイルは以下の通り。
.version
JobSchedulerのバージョン
cronconverter.sh
crontabをJobSchedulerのジョブに変換するスクリプト(詳しくはSOSのHow to migrate cron jobs to JobScheduler jobsの項参照)
dashboard.sh
JID(JobScheduler Infomation Dashboard)起動スクリプト
jobeditor.sh
JOE(JobScheduler Object Editor)起動スクリプト
jobscheduler.sh
JobScheduler起動スクリプト
jobscheduler_client.pl
JobSchedulerにXMLコマンドを実行させるためのTCP/UDPクライアント
jobscheduler_environment_variables.sh
JobScheduler環境設定スクリプト
jobscheduler_event.sh
イベント制御スクリプト
scheduler
JobScheduler実行バイナリ
scheduler_safe.sh
JobScheduler起動監視スクリプト
setuid
ジョブ実行時の実行ユーザ変更プログラム(実際に利用する場合はJobScheduler - FAQsの中のRun Jobs as a Specific UserIDの項を参照して準備を行う)
動作確認
インストールが終わるとJobSchedulerが起動しているのでブラウザからlocalhost:4444にアクセスする。
以下のようなJOC(JobScheduler Operations Center)の画面が表示されれば正常に動作している。
他にも設定があるのでいったんサービスを終了させておく。
% sudo /usr/local/jobscheduler/scheduler/bin/jobscheduler.sh stop
各種設定
initスクリプト設置
% sudo ln -s /usr/local/jobscheduler/scheduler/bin/jobscheduler.sh /etc/init.d % sudo update-rc.d jobscheduler.sh defaults
JOC日本語化
バージョン1.3.12.3137以降、JOCが日本語化されたのでその設定を行う。
% cd /var/lib/jobscheduler/scheduler/config/operations_gui % sudo cp -p cp -p custom.js custom.js.org % sudo vi custom.js (変更前) 24 _sos_lang = ''; (変更後) 24 _sos_lang = 'ja';
サービスを起動しJOCの画面をリロードして日本語化されていることを確認する。
% sudo service jobscheduler.sh start
ジョブ実行テスト
環境が整ったのでジョブの実行テストを行う。
ここではGUIを使わず直接ジョブの定義をXMLファイルとして記述し、JICで即時実行する手順を示す。
ジョブは単純にStandaloneジョブとする。
簡単な例として現在時刻を出力するシェルスクリプトを定義する。
% cd /var/tmp % cat <<EOD > now.job.xml <?xml version="1.0" encoding="ISO-8859-1"?> <job > <script language="shell"> <![CDATA[ #!/bin/sh LANG=C echo "$SCHEDULER_JOB_NAME is running" echo "now - `date`" exit $? ]]> </script> </job> EOD
注意点として、ファイル名は「ジョブ名.job.xml」にする必要がある。この命名規則が違っているとJOEで参照しようとした際に「could not open file causeString index out of range:-1」というエラーが出て参照できない。
ジョブ定義は/var/lib/jobscheduler/scheduler/config/live配下にて管理するのでテストディレクトリを作った上でジョブ定義ファイルを配置する。
% mkdir /var/lib/jobscheduler/scheduler/config/live/test % cd /var/lib/jobscheduler/scheduler/config/live/test % mv /var/tmp/now.job.xml .
するとデフォルトで60秒以内にジョブ登録が行われる。JobSchedulerの再起動等は必要ない。
ジョブ定義はJOEを起動して確認できる。
% /usr/local/jobscheduler/scheduler/bin/jobeditor.sh
[File] > [Open]より先ほど作ったtestフォルダ配下のnow.job.xmlを開くとジョブ定義が取り込まれて以下のように表示される。
このジョブを即時実行してみる。
ブラウザからlocalhost:4444にアクセスしてJOCを起動し、画面左下の「test」>「now」ジョブを選択して右側の[ジョブメニュー]から[タスク即時実行]を選択する。
タスク履歴が表示され、そのタスクをクリックしてログが表示されれば成功である。
2014-05-06 00:53:59.382+0900 [info] SCHEDULER-918 state=starting (at=2014-05-06 00:53:59.208+0900) 2014-05-06 00:53:59.382+0900 [info] SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/neo/sos.BHWY3b"' 2014-05-06 00:53:59.432+0900 [info] now is running 2014-05-06 00:53:59.432+0900 [info] now - Tue May 6 00:53:59 JST 2014 2014-05-06 00:53:59.432+0900 [info] SCHEDULER-915 Process event
その他、複雑なジョブ定義やスケジューリングなどは割愛する。