[CentOS6][SOS JobScheduler] ジョブのオプション設定


Create: 2013/04/10
LastUpdate: 2013/06/04
[ メニューに戻る ]

ジョブには、以下のようなオプションを設定できます。(マニュアルから引用)

enabled  = "yes|no" Disable a Job.
force_idle_timeout  = "yes_no" Task ended by idle_timeout despite min_task
idle_timeout  = "duration" Limit for the waiting_for_order state
ignore_signals  = "all|signalnames"
java_options  = "string"
min_tasks  = "number" The minimum number of tasks kept running
name  = "jobname"
order  = "yes_no" Order Controlled Job
priority  = "process_priority"
process_class  = "process_class"
replace  = "yes|no"
spooler_id  = ""
stop_on_error  = "yes|no"
tasks  = "number" The maximum number of tasks
temporary  = "yes_no"
timeout  = "duration" The time allowed for an operation
title  = "text"
visible  = "yes|no|never"  
warn_if_longer_than  = "HH:MM:SS|seconds|percentage%"  注)バグあり (2013/05現在未解決)
warn_if_longer_than = "HH:MM:SS|seconds|percentage%"

JOEだと、下図の画面で設定できます。


いくつか試したので、以下に紹介します。

1.tasks


Task の多重度を指定します。デフォルトは "1" です。
ジョブを実行した状態を Task と呼びます。
同じジョブを複数実行して、いくつも同じ Task を生成できますが、デフォルトでは、シーケンシャルに Task が実行されます。
タスクを並列に実行したい場合は、tasks に多重度を指定します。
例えば、tasks="2" とすれば、2つの Task は並列に実行されます。
並列に Task を実行している場合は、JOC で下図のように 複数の Task を見ることができます。


ちなみに、デフォルトの tasks="1" で Task がシーケンシャルに実行されているとき、実行待ち状態の Task は、[Task Queue]タブで確認できます。


2.min_tasks


ここで指定した Task の数だけ、常に実行中になります。デフォルトは "0" です。
例えば、min_tasks="1" にして xml ファイルを保存すると、すぐにジョブが実行されます。
ジョブの実行が終わっても、繰り返し、同じジョブが実行されます。
このオプションを使用すれば、何らかのメッセージを受信待ちして、処理を行うジョブを作成できそうです。
ただし、他のオプションとの兼ね合いで、動作は変わるようなので詳細はマニュアルを参照してください。

3.timeout


Task の処理時間を制限します。
Taskの処理時間が、ここで指定した時間を越えるとTask は、stop します。
例えば、timeout="10" として、30秒スリープするジョブを実行した場合、10秒後に Task は Kill されて stop します。


4.warn_if_longer_than / warn_if_shorter_than


ジョブの処理時間を監視します。
ジョブの処理時間が、warn_if_longer_than に設定した時間をオーバーした場合は、ジョブを警告終了にします。
ジョブの処理時間が、warn_if_shorter_than に設定した時間より短い場合は、ジョブを警告終了にします。
また、ジョブ警告終了時のメール送信設定が"no"であっても、メールの宛先が設定されていれば、メールが送信されます。
注意)
warn_if_longer_than には、バグがあり、2013/05現在、未解決です。
ローカル(Managerサーバ)の シェルスクリプトでは、正常に動作しません。
Agentのシェルスクリプトは問題ありません。
ローカルで、このパラメータを使用する場合は、内部APIを実装する必要があるみたいです。(※私が動作確認したのは perl だけです)
たとえば、warn_if_longer_than に "10" を設定すると、ジョブの処理時間が 10 秒を超えると、警告終了します。
下図は、20秒スリープするジョブが、警告終了したときの実行結果です。
2013-05-21 08:10:17.090 [info]   SCHEDULER-918  state=starting (at=2013-05-21 08:10:17.074)
2013-05-21 08:10:17.125 [info]   SCHEDULER-987  Starting process: '/bin/sh' '-c' '"/tmp/jobs/sos.rmOPj9"'
2013-05-21 08:10:18.124 [info]   test_job01 processed 
2013-05-21 08:10:18.124 [info]   Current Timestamp: 2013-05-21 08:09:23
2013-05-21 08:10:18.124 [info]   Current Hostname: centos6y
2013-05-21 08:10:18.124 [info]   Current Username: jobs
2013-05-21 08:10:27.090 [WARN]   SCHEDULER-712  Task runs longer than the expected duration of 00:00:10
2013-05-21 08:10:37.472 [info]   END
以下は、警告メールの内容です。
From jobs@localhost.localdomain  Tue May 21 08:10:27 2013
Return-Path: <jobs@localhost.localdomain>
X-Original-To: jobs@localhost
Delivered-To: jobs@localhost.localdomain
Date: Tue, 21 May 2013 08:10:27 +0900 (JST)
From: "Scheduler centos6a:4444 -id=scheduler" <jobs@localhost.localdomain>
To: jobs@localhost.localdomain
Subject: Task test/test_job01:15374: SCHEDULER-712 Task runs longer than the
 expected duration of 00:00:10
Content-Type: text/plain; charset=us-ascii
X-SOS-Spooler:
Status: R

2013-05-21 08:10:27.100 Job Scheduler -id=scheduler  host=centos6a  port=4444


ジョブ警告終了時のメール送信設定を"yes" にした場合は、上記のほかに、実行結果のメールも送信されます。