LoginSignup
5
3

More than 1 year has passed since last update.

JS7® JobScheduler 初期設定、サンプルWorkFlowの登録

Last updated at Posted at 2022-04-05

概要

JS7 JobSchedulerの稼働後の初期設定、サンプルデータを登録する方法、および各サンプルの概要を説明します。
サンプルWorkFlowは、JobScheduler を初めて使う場合の学習用途や、実際にWorkFlowを設定する際の参考データになるかと思います。

前提条件

JS7 jobscheduler の準備

下記ページに従い、docker-compose で joc, controller, agent 稼働環境を用意します。
JS7® JobScheduler docker-compose で起動

もしくは通常セットアップした環境があれば、そちらでも利用できます。
※本例はLinux環境前提ですが、WindowsのAgentでも読み替えれば使えると思います。

Agent Aliasの調整

agent の Alias Names に primaryAgent と登録してください。
add_agent-alias.png
※サンプルデータにて、Job実行Agentとしてこの名前が登録されているため。
※Agent Name の変更は、既存環境に影響がでるため、基本的にAliasでの対応を推奨します。

初期設定

Settings

右上のメニューからSettingsを開きます。
menu-settings.png

dailyplan および cleanup の time zone 設定を行います。
※Saveボタンはありません。変更すれば反映されます。
menu-settings_timezone.png

Profile 設定

次に、ログインユーザーごとのProfile設定を開きます。
menu-profile.png

こちらは好みによりますが、Time Zone および Date Time Format を指定します。
Languageで日本語表示も選べます。
(個人的には英語表記のほうがドキュメントで調べる際に楽なので、このままにします)
menu-profile_sample.png

サンプルの登録

サンプルデータのダウンロード

下記メニューより、default.zip sample.tar.gz の2ファイルをダウンロードします。
inventory_download_sample.png

リソース変数の登録

default.zipを取り込みます。
これにより、基本的な環境変数の定義を取り込むことができます。
※本リソース変数は、本番/検証環境問わず登録したほうが良いです。

CONFIGURATION - Inventory を開きます。
こちらはWorkFlow、Scheduleなどの定義を行うメニューです。

image.png

Import を行います。
image.png

default.zipを選択し、Import
image.png

これにより、Defaultsフォルダ以下の設定が取り込まれたことを確認します。
image.png

リソース変数の修正

取り込んだDefaultsフォルダを展開し、JobResources の Default(という名前のリソース変数)を編集します。
※Arguments で指定されている値を修正します。Environment Variables は編集しないでください。
ここで指定した値は、WorkFlow中にて環境変数として利用することができます。
image.png

Name Value
js7JocUrl JOCへのアクセスに使うURLを指定
(例 http://192.168.11.77:4446)
js7ScheduledDate scheduledOrEmpty(format='yyyy-MM-dd HH:mm:ssZ', timezone='Asia/Tokyo')
js7ScheduledYear scheduledOrEmpty(format='yyyy', timezone='Asia/Tokyo')
js7ScheduledMonth scheduledOrEmpty(format='MM', timezone='Asia/Tokyo')
以下省略 timezone指定が UTC となっている箇所は `Asia/Tokyo'に修正してください

※ここで指定した値は、WorkFlow中にて環境変数として利用することができます。
※TimeZoneを修正しないと、該当変数を利用する際に、日付時刻がUTCで返ります。

補足 CentOS7, AmazonLinux2 の環境で試したところ、下記修正が必要でした。
JS7 - Troubleshooting - Job reports: No such environment variable: COMPUTERNAME

Name Value
js7AgentHostname env('HOSTNAME', env('COMPUTERNAME', ""))

修正が終わったらDeployをします。
image.png

これにより、本設定がcontroller, agent に同期されます。

同様に、eMailDefaultも編集、Deployを行ってください。
※本WorkFlowサンプルでは使わないので省略(編集せずDeployでも可)

WorkFlowサンプル登録

リソース変数と同様の手順で、sample.tar.gzをインポートします。
※File Format で TAR_GZ を選んでから選択してください。
image.png

これで、Examples.Unix フォルダ以下の構成が読み込まれました。
image.png

登録されたサンプルWorkFlowを一括でDeployします。
image.png

Handle recursively のチェックを付けることで、フォルダ以下をまるごと指定できます。
image.png

各WorkFlowが Deployed となっていることを確認してください。
※Controller,agentへのデプロイが正常にできていることが確認できます。
image.png

同様に、release を行ってください。
これでスケジュール情報が更新されます。
※schedull, calendar などの情報は JOC上のDailyPlan サービス管理であるため、AgentへのDeployはされません。
image.png
階層下のSchedule、Working Day Calendar をすべて選択しSubmit
image.png

以上でサンプルデータの登録作業はおわりです。

サンプルWorkFlowのざっくりとした説明

各サンプルが何をやっているのか、動作確認の際に注視すべきポイントのメモです。

workflow Path 内容
01_HelloWorld/
jduHelloWorld
シェルJobおよびリソース変数を利用した基本処理
JobResourcese に /Defaults/Defaultを指定することで、ここで定義したリソース変数 $JS7_WORKFLOW_NAME, $JS7_JOB_NAME を参照できる
01_HelloWorld/
jduHelloRunningLog
秒単位で100までカウント。jobで定義した標準出力がログに随時表示されていくことを確認
02_ParallelExecution/
jduFork
Fork(並列処理)サンプル。
job1実行後、job2_1x, job2_2x を並列実行。各処理がすべて終了したのを待ち、job3を実行
02_ParallelExecution/
jduForkNested
Forkサンプルその2。
Fork処理をネストすることが可能
02_ParallelExecution/
jduForkList
ForkListサンプル
Order変数として、countryCodeに BR,FR,UK と3つの値を指定すると、1度のOrder中で、ForkList中のjob1,job2 は、変数毎に個別に並列処理を行う。
02_ParallelExecution/
jduForkListMulti
ForkListサンプルその2。
Order変数として複数の変数値を指定することができる。
03_VariablesPassing/
jduVariablesAdHoc
Job中にて$JS7_RETURN_VALUES に変数値を追記することで、後続Jobに変数値を渡すことができる。
※後続Jobから参照するには、Job環境変数を定義する必要あり。
03_VariablesPassing/
jduVariablesDeclared
WorkFlow変数の定義、参照。Job中の処理で値を変更したい場合は 新たに new_booking_code, new_flight_destination の値でJob環境変数を定義
03_VariablesPassing/
jduVariablesFork
Fork処理中は、同一変数名でも分岐している3パターンそれぞれ独立して変数$new_flight_destinationを上書きできる。Fork終了後は、分岐前のjob1にて渡された変数値が参照される。
03_VariablesPassing/
jduVariablesNodes
Node引数を利用。※特定Node(Job?)のみで利用可能な変数定義
別途Job環境変数で指定が必要
04_ErrorHandling/
jduFinish
デフォルトで、WorkFlow変数にてreturn_value_job1 = 0が指定されている。
$return_value_job1 = 0のままの場合、job2はスキップし、job3を実行。正常終了となる。
Order変数return_value_job1 = 1を指定(WorkFlow変数を上書き)して実行すると、条件一致でjob2が実行され、そこまででFinishとなる。
04_ErrorHandling/
jduFail
デフォルトで、WorkFlow変数にてreturn_value_job1 = 1が指定されている。
$return_value_job1 > 0の場合job2実行、Return Code 1 でFailとなる。
Order変数return_value_job1 = 0を指定(WorkFlow変数を上書き)して実行すると、job3が実行され、正常終了となる。
04_ErrorHandling/
jduReTry
job2_bの結果(ランダム値が偶数か?)がエラーの場合10回までリトライ。リトライ時の待ち時間は毎回1秒ずつ増える。
※job2_bの割り算を加工してエラーを出やすくすると分かりやすい
04_ErrorHandling/
jduWarnIfLongerThan
job1の実行時間がWarn on longer execution periodで指定された3秒以上の場合、通知が飛ぶ
※Monitorサービスで通知されるため、別途Notification設定が必要です。
04_ErrorHandling/
jduWarnIfShorterThan
job1の実行にWarn on shorter execution periodで指定された10秒以下の場合、通知が飛ぶ
05_ScheduledExecution/
jduScheduledWorkflowDaily
jduAllDaysカレンダーに従い、毎日実行
WorkFlowの画面から scheduled のorder が登録されていることを確認。DailyPlanの画面でも登録を確認。
もし登録されていない場合は DailyPlanサービスの再起動でOK
05_ScheduledExecution/
jduScheduledWorkflowBusinessDays
jduBussinessDaysカレンダーに従い月-金に実行
05_ScheduledExecution/
jduScheduledWorkflowCyclic
21-22時の間で5分毎に循環実行。
05_ScheduledExecution/
jduScheduledWorkflowForkList
スケジュールからForkList用のcountryCode値リストを渡して実行
06_MutualExclusion/
jduExclusiveLockSerial
Exclusive Resource Locks サンプル
シンプルなロック。ロック指定箇所は同時に1Taskしか実行できない。
3回ほど連続でorderすることで、Lockの動作が確認できる。

job2_1x側は、前orderのjob2_1b終了後、次orderのjob2_1aが流れる。

job2_2x側は、前orderのjob2_2c終了後、次orderのjob2_2aが流れる。
06_MutualExclusion/
jduSharedLockSerial
shared lockサンプル
jduLockBig capacity = 12, duLockSmall capacity = 2
3回ほど連続でorderすることで、Lockの動作が確認できる。

job2_1x 側はcapacity = 2 に対してWeight = 2 のため、同時に1Taskしか処理できない。
前Orderのjob2_1b終了後、次orderのjob2_1aが流れる(shared lockによる制限)

job2_2x 側はcapacity = 12 に対してWeight = 5 のため、同時に2Task処理できる。ただしJobのParallelism = 1 であるため、Job単位は同時実行1まで。
1回目orderのjob2_2a終了後、2回目orderのjob2_2aが流れる。(Parallelismによる制限)
1回目orderのjob2_2c終了後、3回目orderのjob2_2aが流れる。(shared lockによる制限)
06_MutualExclusion/
jduSharedLockParallel
shared lockサンプル
jduLockBig capacity = 12, duLockSmall capacity = 2
3回ほど連続でorderすることで、Lockの動作が確認できる。

job2_1x 側はcapacity = 2 に対してWeight = 1 のため、同時に2Task処理できる。ただしJobのParallelism = 1 であるため、Job単位は同時実行1まで。
前Orderのjob2_1a終了後、次orderのjob2_1aが流れる(Parallelismによる制限)
1回目orderのjob2_1b終了後、3回目orderのjob2_1aが流れる。(shared lockによる制限)

job2_2x 側はcapacity = 12 に対してWeight = 5 のため、同時に2Task処理できる。
1回目orderのjob2_2a終了後、2回目orderのjob2_2aが流れる。(Parallelismによる制限)
1回目orderのjob2_2c終了後、3回目orderのjob2_2aが流れる。(shared lockによる制限)
07_ConditionalExecution/
jduConditionalVariables
条件分岐サンプル
WorkFlow変数 run_job1 = false run_job2 = false 指定あり

そのままorder登録すると、条件に従い、job2が実行される。
Order変数にてrun_job1 = true を指定することで、job1が実行される。
07_ConditionalExecution/
jduConditionalReturnCode
前Jobのリターンコードによる条件分岐
WorkFlow変数にてreturn_code_job1 = 0, return_code_job2 = 0, return_code_job3 = 0 の指定あり
job1,job2,job3は各変数値をリターンコードとして返す。また、リターンコード 0,1,2,3,4 はSuccessとなるように設定あり

そのままorder登録すると、条件に従い、job1,job2,job4,job5が実行される。
Order変数にて return_code_job1 = 1を指定すると、job1,job3,job4,job5 が実行される。
Order変数にて return_code_job2 = 1を指定すると、job1,job2,job5 が実行される
Order変数にて return_code_job1 = 4, return_code_job3 = 4を指定すると、job1,job3,job5 が実行される
Order変数にて return_code_job2 = 5を指定すると、job2で failedとなる
07_ConditionalExecution/
jduConditionalResult
JS7_RETURN_VALUES環境変数を使っての条件分岐
WorkFlow変数にてreturn_code_job1 = 0, return_code_job2 = 0, return_code_job3 = 0 の指定あり
job2,job3は各変数値をreturn_value_jobの値としてJS7_RETURN_VALUES環境変数に追記する。また、リターンコード 0,1,2,3,4 はSuccessとなるように設定あり
※job1,job2,job3とも変数値を固定値で書き換えてしまうため、うまく動作しないように見える。該当箇所をコメントアウトする必要あり。

(job1,job2,job3の修正を行った場合の結果)
そのままorder登録すると、条件に従い、job1,job2,job5が実行される。
Order変数にて return_code_job1 = 1を指定すると、job1,job3,job5 が実行される。
Order変数にて return_code_job2 = 1を指定すると、job1,job2,job4,job5 が実行される。
Order変数にて return_code_job1 = 1,return_code_job3 = 1を指定すると、job1,job3,job4,job5 が実行される。
Order変数にて return_code_job2 = 5を指定すると、job1,job2,job4,job5 が実行される。
※リターンコードは書き換えていないため、各Jobのリターンコードは0となる
13_Synchronization/
jduNoticeDailyPlanExpect
Notice Boardsのサンプル
これを実行することで、該当Notice BoardjduNoticeDailyPlan にIDyyyy-mm-ddのPost待ちで処理が待機となることを確認。
※IDyyyy-mm-ddはOrderIDから取得するが、UTCのTimeZoneから日付値をとるため、PostとExpectの実行タイミングによっては一致しないのでは?DailyPlanで実行される場合は該当日付値となる?
13_Synchronization/
jduNoticeDailyPlanPost
実行することで、Notice BoardjduNoticeDailyPlan にIDyyyy-mm-ddの通知を行う。これにより、jduNoticeDailyPlanExpectの待ち状態だった処理が実行されたことを確認。
※RESOURCESより、NoticeBoardの通知状況の確認、既に通知されたIDの削除が可能
13_Synchronization/
jduNoticeDailyPlanOrderNameExpect
実行すると、 Notice BoardjduNoticeDailyPlan のID通知待ちとなる。 jduNoticeDailyPlanExpectの実行で、Notice BoardjduNoticeDailyPlan にIDyyyy-mm-ddが通知されると、処理が進み、次にjduNoticeDailyPlanOrderNameの通知待ちとなる。
jduNoticeDailyPlanOrderNamePost を実行して、jduNoticeDailyPlanOrderName にID yyyy-mm-ddnameが通知されると、待ち状態だった処理が進むことを確認。
13_Synchronization/
jduNoticeDailyPlanOrderNamePost
上記実行に必要。
14_Sequencing/
jduSequenceAddOrder_001
job1,job2の処理後、別WorkFlowjduSequenceReceiveOrderのOrderを登録。この際Order変数として booking_code = BC45, flight_destination = Londonが渡される。 jduSequenceReceiveOrderもあわせて実行されたことを確認。
14_Sequencing/
jduSequenceAddOrder_002
001と同様。条件一致の場合のみ別WorkFlowのOrder登録をし、後続処理を実行。
※後続処理は、非同期(呼び出しWorkFlowの結果を待たず)実行されるため注意。
14_Sequencing/
jduSequenceReceiveOrder
001、002より呼び出される処理
15_AdmissionTimes/
jduAdmissionTime_001
Admission Timeのサンプル
job2 にAdmission Time (水曜16時から2h、日曜13時から4h)が設定されており、 Skip Job if no admission for Order day にチェックがついている。

指定曜日の場合、指定時間外ならば待機、指定時間になると処理が流れる。
指定曜日以外の場合、job2はスキップされる。
※WorkFlowのTimeZoneをAsia/Tokyo(もしくは対象TimeZone)指定することを忘れずに!

その他

各種サンプルのOnlineデモの説明、Workflow定義の動画マニュアルは下記ページに掲載されています。
※online demoのみに存在するもの、本ページで説明したサンプルデータのみに存在するものがあります。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3