JobSchedulerでちょっと面倒なバッチを設定してみました

このエントリーをはてなブックマークに追加
kzhirataです。今年も残すところあと20日。あっという間に一年が過ぎようとしています。
変わったことといえば、やけ食いで太ったことでしょうか。

今回は、JobschedulerというOSSのスケジューラソフトを紹介します。
ある程度の規模のシステム開発においては、システム間連携は必須です。
既存のシステム・クラウドの様々なサービスを連携することが増えてきています。
ここ数年は、商用ソフトは高いため、ジョブスケジューラソフトもOSSでという要望をお客様から聞くことも増えています。

JobSchedulerとは、ドイツのSoftware Open Source社(以下、SOS社と記述)が開発したソフトウェアです。
Windows版とLinux版は、OSSとして公開され無料で使うことができます。
JobSchedulerの導入については、@ITのJobSchedulerの記事がわかりやすいかと思います。
日本でも日本ジョブスケジューラユーザグループがあり、これから盛り上がることを期待したいところです。

また、JobScheduler自体は、c++・Java・Scalaで開発しています。ソースはSOS社のサイトから取得できます。

使ってみて感じたスケジューラソフトにおけるJobSchedulerのメリットは以下です。
  • cronだとちょっと面倒な設定がブラウザから設定できる
    • ファイル受信したタイミングでジョブ起動ができる
    • 第3土曜日、月末日など少し複雑な条件でのジョブ起動ができる
    • ジョブの多重起動を防止することもできる
  • ジョブの設定が全てテキストファイル(XML)なので構成管理できる
    • JenkinsでCIができる
  • サーバのリソースをあまり使わない
    • ジョブの制御だけならAWSのEC2のmicro instanceで十分!
  • ジョブ起動の設定ファイルに、シェルだけでなくperlやJavaで記述することができる

今回は、JobScheduler(JOC)をEC2とRDSにインストールする手順を書きます。
本家のドキュメントは古く32bit版のJavaを使っていますが、今回は64bit版のJavaを使います。
また、AWSのmicro instanceを使うので、無料で試すことができます。

準備するもの
  1. EC2 (Amazon Linux) micro instance
  2. RDS (MySQL 5.6) micro instance
まずは、ここを参考にEC2を立ち上げます。
OS(AMI)はAmazon Linux 64bit、micro instanceを設定してください。



言語設定を日本語に変更します。

$ sudo vi /etc/sysconfig/i18n
LANG="ja_JP.utf8"
LC_CTYPE="ja_JP.utf8"

タイムゾーンをJSTに変更します。

$ sudo mv /etc/localtime /etc/localtime.ORG
$ sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
一旦、rebootします。

RDSはここを参考に設定します。
今回はMySQL 5.6を使います。



MySQLの設定は以下として設定しておきます。

  • データベース名:scheduler
  • ユーザ名:scheduler
  • パスワード:適当な文字列
OpenJDKをyumでinstallします。

sudo yum install java-1.7.0-openjdk

これでJobSchedulerをインストールする準備が整いました。
まずは、SOS社のサイトから「Linux-x64 Full install」でJobSchedulerをダウンロードします。

wget http://sourceforge.net/projects/jobscheduler/files/jobscheduler_linux-x64.1.5.3253.tar.gz

ダウンロードしたものを展開します。
tar xvfz jobscheduler_linux-x64.1.5.3253.tar.gz

展開後、下記ディレクトリに移動します。
cd jobscheduler.1.5.3253

JobSchedulerは通常、GUIでインストールしますが、CUIでもインストール可能です。
今回は、CUIでインストールします。


インストールするための設定ファイルは下記xmlファイルです。

jobscheduler_install.xml

プログラムのインストールディレクトリと、Jobの定義ファイルやログを配置するユーザディレクトリを定義します。
ここでは
  • インストールディレクトリ
    • /usr/local/jobscheduler
  • ユーザディレクトリ
    • /home/ec2-user/jobscheduler
としました。
    

        
        /usr/local/jobscheduler

    
    

        
        /home/ec2-user/jobscheduler

    

ネットワークの設定です。ここではどのIPからでもアクセスできるようにschedulerAllowedHostの値を0.0.0.0で設定します。

    
        
            

            
            

            
            

            
            

            
            

            
            

            
            

            
            

        
    

DBを設定します。
ここでは、下記のように定義しています。

  • データベース名:scheduler
  • ユーザ名:scheduler


    
        
            

            
            

            
            

        
    
    
        
            

            
            

            
            

            
            

            
            

            
            

            

            
            

            
            

        
    
下記コマンドを実行してインストールします。

chmod 755 setup.sh
./setup.sh jobscheduler_install.xml

インストールが完了すると下記のようになります。



ブラウザでEC2のドメイン名:4444にアクセスすると、下記のようにジョブ管理画面が出ます。


ジョブ管理画面からは、ジョブの実行ステータス、ジョブの実行予定日時、実行したジョブの結果、ログなど様々な情報をみることができます。
これなら、多少バッチジョブの数があっても混乱することはないですね。しかも、unixコマンドを知らない人でもジョブの状況を把握したり、ジョブ起動することができます。

JobScheduler自体を起動・停止・再起動したい場合は、下記コマンドを実行すればOKです。
#起動
/usr/local/jobscheduler/scheduler/bin/jobscheduler.sh start
#停止
/usr/local/jobscheduler/scheduler/bin/jobscheduler.sh stop
#再起動
/usr/local/jobscheduler/scheduler/bin/jobscheduler.sh restart
#状況
/usr/local/jobscheduler/scheduler/bin/jobscheduler.sh status

また、画面の日本語化は下記ファイルの

/home/ec2-user/jobscheduler/scheduler/config/operations_gui/custom.js

_sos_lang            = 'ja';
とすれば大丈夫です。

様々なサービスをインテグレーションするときにバッチジョブの連携が大変な場合は、JobSchedulerを考えてみてはいかがでしょうか。

また、シャノンではマーケティングプラットフォームをメインにしたクラウドインテグレーションを担当する仲間を募集しています。
興味を持った方はこちらから

今回のところはこの辺で...

次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...