毎月第三土曜日の前日といった指定はJobSchedulerで設定できますでしょうか。

588 views
Skip to first unread message

Kozo Hirata

unread,
Dec 13, 2013, 3:55:14 AM12/13/13
to jobsche...@googlegroups.com
平田と申します。

JobSchedulerの設定で、ジョブの起動日時を毎月第三土曜日としてジョブを起動できますが、第三土曜日の前日とか第三土曜日の二日後といった設定はできますでしょうか。

ご存知の方いらっしゃれば教えていただければと思います。

船井さん

本日はお話させていただきありがとうございます。
Googleカレンダーの祝日はAPIで取得できますね。
これを使ってJobSchedulerに日本の祝日を設定するバッチを書けるのではないでしょうか。(JobSchedulerのAPIを知らないので思いつきで申し訳ありません。)

よろしくお願いします。

shinji shiroma

unread,
Dec 13, 2013, 9:16:29 AM12/13/13
to jobsche...@googlegroups.com
城間と申します。
試していませんが、参考まで。

1.毎月第3土曜日の前日、または翌日に実行する方法

 <run_time>で以下のように設定します
  ・毎月第3土曜日に実行する
  ・土曜日を休日に設定する
  ・休日の翌日(または前日)に実行するよう設定する


2.コードを書いて自分の好きな日時にスケジューリングする方法

 <run_time> の start_time_function に自分で作成したスケジューリング用のスクリプト名を指定すると、自分の好きな時間にスケジューリングできます。
 スクリプトは、以下のように作成して、"yyyy-mm-dd hh:mm:ss" 形式で文字列を返すと、その時間にスケジューリングされるようです。
  (scheduler.xml あたりに記述します。)

 <scheduler_script name="my_time">
    <script language="javascript"><![CDATA[

        ここに毎月第3土曜日の二日後を算出するコードを書く

    ]]></script>
 </scheduler_script>

◇参考URL
http://www.sos-berlin.com/doc/en/scheduler.doc/xml/run_time.xml#attribute_start_time_function
http://www.sos-berlin.com/doc/en/scheduler.doc/xml/config.xml#element_scheduler_script


 

Kozo Hirata

unread,
Dec 13, 2013, 10:51:33 AM12/13/13
to shinji shiroma, jobsche...@googlegroups.com
城間さん

早速の返信ありがとうございます。

2.コードを書いて自分の好きな日時にスケジューリングする方法
で試してみたいと思います。

取り急ぎ御礼まで。
よろしくお願いします。



2013/12/13 shinji shiroma <sir...@blue21.ddo.jp>

--
このメールは Google グループのグループ「日本JobSchedulerユーザーグループ(JJUG)」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、jobscheduler-...@googlegroups.com にメールを送信します。
このグループに投稿するには、jobsche...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/jobscheduler-ja からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

shinji shiroma

unread,
Dec 13, 2013, 9:38:31 PM12/13/13
to jobsche...@googlegroups.com
城間です。

面白そうだったので、ちょっと試してみました。

1.はダメですね。忘れてください
2.は、情報に誤りがありました(下記、参照)

scheduler.xml に以下のように function を定義して、スケジューリングしたい日時を返します。
(Jobscheduler は再起動が必要です。)

    <script language="javascript"><![CDATA[
       function my_time() {
          return "2013-12-31 10:00:00";
       }
    ]]></script>

  ※ my_tyme() には引数が2つあるようですが、今回は省略してます。
  ※ <process_classes> と <http_server> の間に定義しました。(定義位置によってはエラーになるかもしれません)
  ※ 64bit の場合、languageは、"javascript" ではなく "java:javascript" になるそうです。

ジョブでは、以下のように、<run_time> を定義します。

  <run_time start_time_function="my_time"/>

以上





Kozo Hirata

unread,
Dec 14, 2013, 10:20:04 AM12/14/13
to shinji shiroma, jobsche...@googlegroups.com
城間さん

ありがとうございます。
早速AWS EC2上(64bit)で試してみたのですが、下記エラーが出て実行できませんでした。

Z-JAVA-105 Java exception java.lang.NoSuchMethodError("my_time"), method=CallVoidMethodA []

scheduler.xmlは、下記のように設定しました。
    <script language="java:javascript">

        <![CDATA[

           function my_time() {

               return "2013-12-15 00:00:00";

           }

       ]]>

    </script>


呼び出し側のジョブは以下の通りです。

<job>

<params/>

<script language="shell">

<![CDATA[

#!/bin/sh

echo “$SCHEDULER_JOB_NAME is running”

echo “Current Timestamp `date`”

exit

$?

]]>

</script>

<run_time start_time_function="my_time"/>

</job>


JavaScriptの関数の戻り値がないというエラーのようですが、設定に誤りがあるのでしょうか。
同じようなエラーでつまずいたご経験があれば教えていただければ幸いです。

よろしくお願いします。



2013/12/14 shinji shiroma <sir...@blue21.ddo.jp>

shinji shiroma

unread,
Dec 14, 2013, 7:49:13 PM12/14/13
to jobsche...@googlegroups.com, shinji shiroma
平田さん

城間です。
すみません。language の情報が間違っていたようです。
64bit の JobScheduler で javascript を使用する場合、"javax.script:rhino" を指定するかもしれません。


my_time、run_time の設定は、私と同じです。
私は、64bit の環境を持っていないので試せないのですが、違いは、language ぐらいです。
language="javax.script:rhino" で試してみてください。

平田さんのエラーは見たことありませんが、多分、ジョブのログに出力されたエラーですよね。
私の場合、以下の操作後、logs/scheduler.log を見て、エラーを確認しています。
この操作で手動でスケジューリングをテストできます。

 ・JOCでジョブを右クリック
 ・メニューから [Set run time] を選択して、run_time の設定画面を表示
 ・<run_time>の設定内容を確認(修正)して、[submit]をクリック。

私の環境は、32bitのCentOSですが、scheduler.xml 修正後にJobScheduler を再起動し、
上記操作をするとジョブがスケジューリングされました。
もし、スケジューリングされないようなら、logs/scheduler.log に my_time 関連でエラーが出ていると思います。

私の環境で動いているサンプルを添付します。参考にしてください。
このサンプルは、現在時刻の30秒後にスケジューリングするようにしています。
language は、環境依存なので注意してください。


以上
よろしくお願いします


2013年12月15日日曜日 0時20分04秒 UTC+9 Kozo Hirata:


2013/12/14 shinji shiroma <sir...@blue21.ddo.jp>
このグループから退会し、メールの受信を停止するには、jobscheduler-ja+unsubscribe@googlegroups.com にメールを送信します。
scheduler.xml
shell_job.job.xml

Satoru Funai

unread,
Dec 15, 2013, 4:19:08 AM12/15/13
to shinji shiroma, jobsche...@googlegroups.com
平田さん、城間さん
全然フォローできてなくて申し訳ありません
こちらでも調査してみます。
船井

----- 元のメッセージ -----
> 差出人: "shinji shiroma" <sir...@blue21.ddo.jp>
> 宛先: jobsche...@googlegroups.com
> Cc: "shinji shiroma" <sir...@blue21.ddo.jp>
> 送信済み: 2013年12月15日, 日曜日 午前 9:49:13
> 件名: Re: 毎月第三土曜日の前日といった指定はJobSchedulerで設定できますでしょうか。

> <script language = "java:javascript" >


>
>
>
> <![ CDATA [
>
> function my_time() {
>
> return "2013-12-15 00:00:00";
>
> }
>
> ]]>
>
> </script>
>
>
>
>
> 呼び出し側のジョブは以下の通りです。
>
> <job>
>
> <params/>
>

> <script language = "shell" >


>
> <![ CDATA [
>
> #!/bin/sh
>
> echo “$SCHEDULER_JOB_NAME is running”
>
> echo “Current Timestamp `date`”
>
>
> exit
>
> $?
>
> ]]>
>
> </script>
>

> <run_time start_time_function = "my_time" />

> jobscheduler-...@googlegroups.com にメールを送信します。


> このグループに投稿するには、 jobsche...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/jobscheduler-ja からこのグループにアクセスしてください。
> その他のオプションについては、 https://groups.google.com/groups/opt_out にアクセスしてください。
>
>
>

> --
> このメールは Google グループのグループ「日本JobSchedulerユーザーグループ(JJUG)」の登録者に送られています。

> このグループから退会し、メールの受信を停止するには、jobscheduler-...@googlegroups.com

Kozo Hirata

unread,
Dec 15, 2013, 5:03:34 AM12/15/13
to Satoru Funai, jobsche...@googlegroups.com
城間さん、船井さん

コメントありがとうございます。

> 64bit の JobScheduler で javascript を使用する場合、" javax.script:rhino"
> を指定するかもしれません。

こちら試してみましたが、同じエラーでした。

> もし、スケジューリングされないようなら、logs/scheduler.log に my_time 関連でエラーが出ていると思います。

参考までに、下記メッセージは、logs/scheduler.log と下記画面です。

Inline image 1

> Z-JAVA-105 Java exception java.lang.NoSuchMethodError("my_time"),method=CallVoidMethodA []

EC2なので、JavaScriptを動かすためのライブラリが必要なのでしょうか?
JavaScriptがダメなら、<script language = "java:javascript" >でJavaなど他の言語でできるかどうか試してみようと思います。

よろしくお願いします。

2013/12/15 Satoru Funai <satoru...@gmail.com>
jobscheduler.png

Suguru Akiho

unread,
Dec 15, 2013, 8:59:49 AM12/15/13
to Kozo Hirata, Satoru Funai, jobscheduler-ja
皆様

こんばんは、秋穂です。

話題になっている件、秋穂の方でも試してみました。
結論から話すとうまくいきませんでした。。

環境は下記です。
・CentOS6.4 64bit
・JobScheduler 64bit

城間さんのメールにあった通り、scheduler.xmlへの定義とjobのrun_timeに
start_time_functionを定義する形で試しました。
結果、jobにてエラーは発生しませんでしたが、スケジュール定義は
指定した時刻は反映されませんでした。

今のところ、32bitは正常に動作し、64bitは動作しないという状況でしょうか。

平田さん

>EC2なので、JavaScriptを動かすためのライブラリが必要なのでしょうか?
JavaScriptのライブラリは別途用意する必要はないはずです。
試しにJobのスクリプト定義を下記のようにして、ログが
出力されればJavaScriptは使えることが確認出来るかと思います。

---
    <script  language="javax.script:rhino">
        <![CDATA[
spooler_log.info('JavaScript is enable');
        ]]>
    </script>
---



2013年12月15日 19:03 Kozo Hirata <kzhir...@gmail.com>:
jobscheduler.png

Kozo Hirata

unread,
Dec 15, 2013, 9:12:16 AM12/15/13
to Suguru Akiho, jobscheduler-ja
秋穂さん、皆様


64bitでの動作確認ありがとうございます。
下記試してみたところ問題なく動作しました。
32bitだとOKで、64bitだとNGみたいですね。

> JavaScriptのライブラリは別途用意する必要はないはずです。
> 試しにJobのスクリプト定義を下記のようにして、ログが
> 出力されればJavaScriptは使えることが確認出来るかと思います。

> ---
>     <script  language="javax.script:rhino">
>         <![CDATA[
spooler_log.info('JavaScript is enable');
>         ]]>
>     </script>
> ---

2013/12/15 Suguru Akiho <suguru...@gmail.com>
jobscheduler.png

shinji shiroma

unread,
Dec 16, 2013, 4:59:35 AM12/16/13
to jobsche...@googlegroups.com
城間です。

私が使っている JobScheduler は、64bit 化される前の 1.3 (32bit)です。
start_time_function がOKだったのは、この 1.3 です。

半年以上も昔のバージョンなので、バージョンの違いが大きいのかもしれませんね。
javascript 関連は、かなり変わってるようですし。

私もCentOS(64bit)に最新バージョンを入れて、も少し、調べてみます。


shinji shiroma

unread,
Dec 18, 2013, 9:04:32 AM12/18/13
to jobsche...@googlegroups.com
城間です。

最新のJobscheduler(64bit)をCentOSに入れて試してみました。
Javascript、Perl はNGでした。my_timeが NoSuchMetthodになります。

Javaを試したところエラーの内容が変わりました。
javaの知識が無いのと net_start_time 用メソッドの実装方法がわからないので
以下のエラーを解決できていませんが、next_start_time を Javaで実装すれば動くような気がします。
next_start_time は、java の method しか認識しませんでした。

.18 22:43:33.689   841 16172.D31A0700 {scheduler} Execute <?xml version="1.0" encoding="ISO-8859-1"?><show_job job="/test/job2" what="source run_time"/>{scheduler} Execute <?xml version="1.0" encoding="ISO-8859-1"?><modify_job job="/test/job2"><run_time start_time_function="my_time"/></modify_job>[ERROR SCHEDULER-197  Module::java_method_id(my_time(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;): unknown Java class]
.18 22:43:35.299  1610 16172.D31A0700 [ERROR SCHEDULER-393  Error when calling <run_time> function 'my_time': SCHEDULER-197  Module::java_method_id(my_time(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;): unknown Java class]
.18 22:43:35.300     1 16172.D31A0700 {scheduler} [ERROR]  (Schedule) SCHEDULER-393  Error when calling <run_time> function 'my_time': SCHEDULER-197  Module::java_method_id(my_time(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;): unknown Java class
.18 22:43:35.301     1 16172.D31A0700 {scheduler} [ERROR]  (Schedule) SCHEDULER-398  After last error, next_start_function='my_time' will no longer be executed for this <run_time>



shinji shiroma

unread,
Dec 20, 2013, 5:17:12 AM12/20/13
to jobsche...@googlegroups.com
城間です。

<run_time> の next_start_time をjavaで実装できました。
動作を確認した環境は以下のとおり。
 ・CentOS6.5(64bit) 
 ・JobScheduler(64bit)(1.5.3253)
 ・jdk 1.6.0_45

java のソースは以下のとおり。内部APIを実装します。
返す時間のフォーマットが 1.3系の Javascript の場合と違っているので注意してください。 

import java.util.*;
import sos.spooler.*;

public class MyTime extends Job_impl {
    public String my_time(String dt, String oid){
        String ret = "2013-12-25T09:42:10Z";
        return ret;
    }
}

コンパイルは以下のとおり。ソースが /home/jobs/workspace にあると仮定します。
Jobscheduler の lib を class_pathに追加してコンパイルします。

cd /home/jobs/workspace
javac -cp .:/opt/sos-berlin.com/jobscheduler/scheduler/lib/* ./MyTime.java

scheduler.xml には以下のように、定義します。

    <scheduler_script>
      <script language="java"
              java_class="MyTime"
              java_class_path="/home/jobs/workspace">
      </script>
    </scheduler_script>

ただ、java_class_path が効いてないようなので、sos.ini にも class_path を定義しました。

[java]
class_path = /home/jobs/workspace

最後に、以下のように JOB を定義します。

    <job name="job1">
    <params />
    <script  language="shell">
        <![CDATA[
echo "$SCHEDULER_JOB_NAME processed $SCHEDULER_ORDER_ID"
echo "Current Timestamp: `date '+%Y-%m-%d %H:%M:%S'`"
echo "Current Hostname: `uname -n`"
echo "Current Username: `whoami`"
exit 0
        ]]>
    </script>
    <run_time start_time_function="my_time"/>
    </job>

これで、JobScheduler を再起動すればスケジューリングされます。


一応、私が動作確認したファイルを添付します。参考にしてください。
ジョブは、scheduler.xml に定義しています。


scheduler.xml
sos.ini
MyTime.java

Kozo Hirata

unread,
Dec 20, 2013, 11:39:50 AM12/20/13
to shinji shiroma, jobscheduler-ja
城間さん

ありがとうございます。
いただいたやり方で私の方でもEC2上で試したところできました。

javac -cp .:/opt/sos-berlin.com/jobscheduler/scheduler/lib/com.sos.scheduler.engine-1.5.3251.jar MyTime.java 

で十分ですね。
連休中に、第K回目のM曜日のN日前という関数を作成してみます。
参考までにJavaの日付計算は面倒なので、下記JodaTimeを使う予定です。


今後ともよろしくお願いします。

2013/12/20 shinji shiroma <sir...@blue21.ddo.jp>

Satoru Funai

unread,
Dec 26, 2013, 3:07:16 AM12/26/13
to shinji shiroma, jobsche...@googlegroups.com
城間さん、いろいろありがとうございます。
ばたばたしていたんですが、漸く調べる時間ができましたのでやってみました。
私の環境は
JobScheduler 64bit Release 1.5.3253
Operations GUI Build: 21054 (2013-09-10)
# uname -a
Linux jobscheduler 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.4 (Final)
# java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
ですが、

scheduler.xmlのscript language指定を
<script language="java:JavaScript">
としたところ動きました。
私の資料が
<script language="java:javascript">
となっていたので、申し訳ありませんでした。

城間さんのshell_jobの結果は
2013-12-26 17:02:32.313+0900 [info] SCHEDULER-918 state=starting (at=2013-12-26 17:02:32.090+0900)
2013-12-26 17:02:32.313+0900 [info] SCHEDULER-987 Starting process: '/bin/sh' '-c' '"/tmp/scheduler/sos.cmGwo5"'
2013-12-26 17:02:32.371+0900 [info] shell_job processed
2013-12-26 17:02:32.371+0900 [info] Current Timestamp: 2013-12-26 17:02:32
2013-12-26 17:02:32.371+0900 [info] Current Hostname: jobscheduler
2013-12-26 17:02:32.371+0900 [info] Current Username: scheduler
2013-12-26 17:02:32.371+0900 [info] SCHEDULER-915 Process event
でerrorはでていませんので、皆さんお試しください。
船井

----- 元のメッセージ -----
> 差出人: "shinji shiroma" <sir...@blue21.ddo.jp>
> 宛先: jobsche...@googlegroups.com

> 送信済み: 2013年12月20日, 金曜日 午後 7:17:12
> 件名: Re: 毎月第三土曜日の前日といった指定はJobSchedulerで設定できますでしょうか。

> 一応、私が動作確認したファイルを添付します。参考にしてください。
> ジョブは、scheduler.xml に定義しています。
>
>
>
>
>

Reply all
Reply to author
Forward
0 new messages