cronからjobschedulerにマイグレーションする方法

2,518 views

Published on

第3回 JobScheduler勉強会で説明した資料です。cronからJobSchedulerに自動変換する方法です。

cronからjobschedulerにマイグレーションする方法

  1. 1. cronからJobSchedulerに   マイグレーションする方法のご紹介 2013年8月23日   TIS株式会社    戦略技術センター   秋穂 賢   2013/8/23  第3回JobScheduler勉強会 1
  2. 2. Agenda •  はじめに   •  自動変換機能①   ~Cron  Adapter  Jobの使い方~   •  自動変換機能②   ~Cron  Converter  Command  Line  Toolの使い方~   •  おわりに   2013/8/23  第3回JobScheduler勉強会 2
  3. 3. 自己紹介 •  秋穂 賢(あきほ すぐる)   •  TIS株式会社 戦略技術センター 所属   •  メインフレームを4年弱触ってました   •  最近はchefとかserverspecとか   •  今はCloudStackと絶賛激闘中 2013/8/23  第3回JobScheduler勉強会 3
  4. 4. はじめに 2013/8/23  第3回JobScheduler勉強会 4 •  Linux   •  Windows ジョブの自動化ってどのようにしてますか? Cron タスクスケジューラ OS標準の機能で   ジョブの自動化は出来る
  5. 5. OS標準の機能だと… 2013/8/23  第3回JobScheduler勉強会 5 09:00  バッチ 07:00  バッチA 08:00  バッチB 15:00  バッチC ① ジョブ数が増えると管理が大変! ② 複雑な処理構成が組めない…   ③管理サーバ数が増えたらもっと大変!!   ④更にそれぞれOSが違ったら…もう考えたくない  
  6. 6. OS標準の機能だと… 2013/8/23  第3回JobScheduler勉強会 6 09:00  バッチ 07:00  バッチA 08:00  バッチB 15:00  バッチC ① ジョブ数が増えると管理が大変! ② 複雑な処理構成が組めない…   ③管理サーバ数が増えたらもっと大変!!   ④更にそれぞれOSが違ったら…もう考えたくない   JobScheduler  を使いましょう  
  7. 7. JobScheduler  VS  cron/タスクスケジューラ •  cron/タスクスケジューラのいいところ – OS標準の機能を使用 – 簡単シンプルに使える •  JobSchedulerのいいところ – ジョブの実行履歴を管理出来る   (ログ・スタート時間・エンド時間・実行時間) – 複数サーバのジョブを一元管理出来る – 内部APIやWebAPIが使える – エラーや先行後続制御が出来る などなど 2013/8/23  第3回JobScheduler勉強会 7 簡単なジョブ管理でもJobSchedulerを使うメリットはある!  
  8. 8. 移行が面倒… •  ただ、ジョブ数が多いと移行が面倒…   – JobScheduler用に作り直さなきゃいけないんでしょ? – ジョブ数多いし、大変だ。。 – それだったらcronのままでいいや •  そんな人のために ※windowsの人はごめんなさい。手で頑張ってね。 2013/8/23  第3回JobScheduler勉強会 8 今回はcron→JobSchedulerのジョブへ   自動変換する機能を紹介します
  9. 9. cron自動変換の方法 •  2つの方法があります 2013/8/23  第3回JobScheduler勉強会 9 コンバートジョブを定義 コンバートスクリプトを実行 •  それぞれご紹介 ⇒JobSchedulerのJobとして実行する ⇒Linuxのシェルスクリプトとして実行する ① ②
  10. 10. 事前準備(共通) •  JobSchedulerをインストールする際にcronを選択 2013/8/23  第3回JobScheduler勉強会 10 Cronのパッケージにチェック crontabの情報を入力
  11. 11. コンバートジョブの使い方 2013/8/23  第3回JobScheduler勉強会 11
  12. 12. コンバートジョブの特徴 •  インストール時に「cron」を選択すれば     デフォルトでコンバートジョブが配置   •  JobSchedulerのJobを実行することで crontab⇒JobScheduler用のJobに変換される   2013/8/23  第3回JobScheduler勉強会 12
  13. 13. コンバートジョブ •  「sos/cron/scheduler_cron_adapter」が出来てる 2013/8/23  第3回JobScheduler勉強会 13 これ crontabの情報を読み込んでJobSchedulerの Jobに自動変換するJob ※初期設定だとスケジュールがない為、手動実行 or  スケジュール定義の必要あり
  14. 14. デモ •  scheduler_cron_adapterを動かしてみます 2013/8/23  第3回JobScheduler勉強会 14 ※crontabには下記2つのJobが設定 */5  *  *  *  *  root  /usr/local/bin/test.sh   */5  *  *  *  *  root  /usr/local/bin/test2.sh  
  15. 15. コンバートジョブを動かす •  エラー発生・・・   – (ジョブ名に「/」は使えませんとのこと)   •  crontabに↓の設定が必要   2013/8/23  第3回JobScheduler勉強会 15 #  job_name  =  my_cron_job   #  job_Wtle  =  test  cron  job1   #  job_Wmeout  =  1   */5  *  *  *  *  root  /usr/bin/test.sh   JobSchedulerのJobに変換した際のJob名 Jobのタイトル Jobのタイムアウト値
  16. 16. コンバートジョブを動かす •  リトライ 2013/8/23  第3回JobScheduler勉強会 16 •  出来た! crontabに設定した情報がJobとして登録されている
  17. 17. コンバートジョブの仕組み •  指定したcrontabの情報を読み取る   •  job_nameなどを設定してJobSchedulerのXML 形式のJobに変換   – JobSchedulerはジョブ関連定義は全てXML   •  JobSchedulerの内部API(java)を使用して生 成したXMLのJobを動的に追加 2013/8/23  第3回JobScheduler勉強会 17 ※詳しくは下記のURLを参照(ソース)   hp://www.sos-­‐berlin.com/doc/doxygen-­‐docs/scheduler/html/ _job_scheduler_cron_adapter_8java_source.html
  18. 18. コンバートジョブの使いどころ •  あまり使う場面が思い浮かばない・・   •  cronの書式で書きたいけど、履歴管理などは JobSchedulerでやりたいというコアなcronファ ンな方は使える   – crontabファイルに監視設定を入れ、変更があっ た際にCronAdapterをキックする 2013/8/23  第3回JobScheduler勉強会 18 ※注意点   •  動的にJobを追加している為、JobSchedulerを再起動したらJobが消える   –  (コンバートジョブを稼働させる必要がある)   •  crontabからジョブを消してもJobSchedulerからは消えない   •  crontabそのまま使うとほぼ100%エラー(  job名に「/」が含まれてるとエラー)   •  変換する前にcronは停止させる必要がある(重複実行される)
  19. 19. コンバートスクリプトの使い方 2013/8/23  第3回JobScheduler勉強会 19
  20. 20. コンバートスクリプトの特徴 •  「Cron  Converter  Command  Line  Tool」という名 のツール   •  インストール時に↓のシェルスクリプトが配置 2013/8/23  第3回JobScheduler勉強会 20 $SCHEDULER_HOME/bin/cronconverter.sh   •  シェルを実行するとcrontab⇒JobScheduler用 JobのXMLが生成   •  出力するJobを「Standalone」 or 「JobChain」を 選択することが可能
  21. 21. コンバートスクリプトの実行 •  cron⇒Standalone  Jobへの変換 2013/8/23  第3回JobScheduler勉強会 21 ./cronconverter.sh  -­‐crontab  crontab_name  -­‐target  out_file   ※どちらもカレントディレクトリは「$SCHEDULER_HOME/bin」にいる前提 変換元のcrontabファイルを指定 変換後のXMLファイルを指定 •  cron⇒JobChainへの変換 ./cronconverter.sh  -­‐crontab  crontab_name  -­‐target  out_file   -­‐createJobChains  true   JobChain生成用のオプションを加えるのみ
  22. 22. デモ •  cronconverter.shを動かしてみます 2013/8/23  第3回JobScheduler勉強会 22 ※crontabには下記2つのJobが設定 */5  *  *  *  *  root  /usr/local/bin/test.sh   */5  *  *  *  *  root  /usr/local/bin/test2.sh  
  23. 23. スクリプトで生成されるXML •  Standalone  Job 2013/8/23  第3回JobScheduler勉強会 23 <?xml  version="1.0"  encoding="UTF-­‐8"?>   ~~          <jobs>              <job  name="my_cron_job"  order="no"  Wmeout="600"  Wtle="test  cron  job1">   ~~ <script  language="shell"><![CDATA[   ~~ /usr/bin/test.sh]]></script>                  <run_Wme>                      <period  repeat="00:05"/>                  </run_Wme>              </job>              <job  name="GlobalCollect/usr/bin/test2.sh"  order="no"                  Wmeout="600"  Wtle="Cron  Job  /usr/bin/test2.sh">   ~~ </job>          </jobs>   ~~   複数Job定義をまとめるタグ(=1つのファイルに複数Job定義) crontabのコメントで記述した内容が反映   Standalone  Jobで定義した為、order=“no” シェルスクリプトの内容が反映 cronの実行間隔が反映 2つ目のJob定義   コメントでJob名を指定しなかった為、デフォルトの名前が設定される
  24. 24. スクリプトで生成されるXML •  JobChain 2013/8/23  第3回JobScheduler勉強会 24 <?xml  version="1.0"  encoding="UTF-­‐8"?>   ~~ <jobs>   ~~ </jobs>          <job_chains>              <job_chain  name="my_cron_job">   ~~ </job_chain>              <job_chain  name="GlobalCollect/usr/bin/test2.sh">   ~~ </job_chain>          </job_chains>          <commands>              <add_order  id="my_cron_job"  job_chain="my_cron_job"  Wtle="my_cron_job">                  <run_Wme><period  repeat="00:05"/></run_Wme>              </add_order>   ~~ </commands>   複数Job定義をまとめるタグ(=1つのファイルに複数Job定義) ・ jobタグの後ろにjob_chainsタグが生成   ・ 個々のJobChain名はJob名と同名   ・ JobChainは1Jobにつき1つ生成 ・ jobタグの後ろにjob_chainsタグが生成   ・ 個々のJobChain名はJob名と同名   ・ JobChainは1Jobにつき1つ生成 ・ JobChainを動かす為のorderも生成   ・ cronのスケジュールが引き継がれている
  25. 25. 生成したXMLの反映方法 •  反映方法は大きく2通り 2013/8/23  第3回JobScheduler勉強会 25 JobSchedulerの設定ファイルで読み込む   ① XMLを分割して config/live 以下に格納する   ② •  ファイルを加工することなくJob定義を反映可能   •  反映にJobSchedulerの再起動が必要   •  JobSchedulerを再起動することなくJobが反映可能   •  生成されたXMLの加工が必要  
  26. 26. 設定ファイルで読み込む方法 •  生成されたXMLファイルを↓のファイルで読 み込ませて、再起動   2013/8/23  第3回JobScheduler勉強会 26 $SCHEDULER_DATA/config/scheduler.xml   <config  ~~>      <base  file="hogehoge.xml"  />   </config>   scheduler.xml内 configタグ以下のbaseタグで生成したXMLファイルを読み込ませる   ⇒JobScheduler起動時に設定ファイルを反映させる   ※  job名に「/」が含まれてるとエラーとなる為、crontabにjob_nameは必要
  27. 27. XMLを分割する方法 •  分割する為のプログラムも提供されている   2013/8/23  第3回JobScheduler勉強会 27 $SCHEDULER_HOMEに移動後、下記コマンドを実行   java  -­‐jar  lib/saxon9he.jar  -­‐s:"変換元XML"  -­‐xsl:"scheduler_data/config/xml2live.xsl"   sos.desWnaWon="out_dir"   •  出力は下記の2パターン   •  job_nameを指定していた場合   –  out_dir直下に分割されたファイルが配置される   •  job_nameを指定していなかった場合   –  out_dir/GlobalCollectディレクトリ以下に分割されたファイルが配置される   –  例:cronの実行ファイルが/usr/local/test.shだった場合、      out_dir/GlobalCollect/usr/local/test.sh.job.xml  が生成   •  out_dirに出力されたファイルをconfig/liveに移動  
  28. 28. デモ •  jobchain.xmlを分割してJobSchedulerに反映してみる 2013/8/23  第3回JobScheduler勉強会 28 ※crontabには下記2つのJobが設定 */5  *  *  *  *  root  /usr/local/bin/test.sh   */5  *  *  *  *  root  /usr/local/bin/test2.sh  
  29. 29. Advanced •  複数ホストのcron情報を1つのJobSchedulerに 集めたい場合 2013/8/23  第3回JobScheduler勉強会 29 scheduler_cron_remote.xmlが見つからず、断念 •  現時点ではリモートホストのcrontabを集めて XMLに変換する
  30. 30. まとめ 2013/8/23  第3回JobScheduler勉強会 30 •  cronからJobSchedulerへの変換は2つの方法   •  コンバートジョブ   – JobSchedulerのインストール後に即使用可能   – 実行する際にはcrontabにjob_nameパラメータが (ほぼ)必須   – 動的にJobを追加する為、再起動で消える   •  コンバートスクリプト   – Crontabの情報を1つのXMLファイルに変換   – Standalone  JobとJobChainを選択可能   – 1ファイルのまま使うことも出来るし、分割して使うこ とも出来る  
  31. 31. まとめ •  どちらを使うべきか?   2013/8/23  第3回JobScheduler勉強会 31 スクリプトを使ってXMLに変換する方がオススメ   •  JobSchedulerのJobに変換した後に保守をす ることを考えると、XMLファイルとしてあった方 がよい  
  32. 32. おわりに 2013/8/23  第3回JobScheduler勉強会 32 cronを使っている方、まずは自 動変換をしてJobSchedulerを 使ってみませんか?  
  33. 33. Thank  you  for  your  aenWon. 2013/8/23  第3回JobScheduler勉強会 33

×