LoginSignup
3
4

More than 5 years have passed since last update.

JobSchedulerの定義ファイルを手書きする

Posted at

JobSchedulerと他のツールの比較

バッチの実行にJobSchedulerを使っているのですが、わりかしこれが使いやすい。

cron

新人時代はcronを使っていたりしましたが

  • 実行時のパスを通すのが面倒
  • 再実行が面倒だったり
  • いつジョブが実行されるかわかりにくい(未来のスケジュールが把握しにくい)

という面があります。

Jenkins

Jenkinsでもいいのですが、こちらは自由度が高い反面

  • いつジョブが実行されるかわかりにくい(未来のスケジュールが把握しにくい)
    • これについては Next Executions というプラグインがあります

は同様の不便さがあります、また

  • ジョブの定義がGUIで決まるので、テキストファイルでジョブを管理できない
  • 重い

みたいな問題もあります

定義ファイルの書き方

  • 参考のため、標準出力にHelloなどと出すだけのジョブを作ってみました

必要なファイルは以下の通りです。

sample
├── sample.job.xml
├── sample.schedule.xml
├── sample_chain,sample.order.xml
└── sample_chain.job_chain.xml

0 directories, 4 files

定義ファイルの中身

気になったところのみコメントします

  • ジョブ本体
    • job order="yes" にすると、そのジョブはジョブのオーダー単位でしか動かせなくなります(本番用)
    • job order="no" にすると、そのジョブは単体でも動きます。テストではとても有効です
sample.job.xml
<?xml version="1.0" encoding="ISO-8859-1"?>


<job  order="yes" stop_on_error="no">

    <script  language="shell">
        <![CDATA[
echo "Hello, JobScheduler !!!"
        ]]>
    </script>

    <delay_order_after_setback  setback_count="1" is_maximum="no" delay="00:01"/>

    <delay_order_after_setback  setback_count="2" is_maximum="yes" delay="0"/>

    <run_time />
</job>

  • スケジュール設定ファイル
    • いろいろスケジュールを設定できます
    • <day> のタグは月~日が1~7までの数値で表されます
sample.schedule.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<schedule>
    <weekdays>
        <day day="1 2 3 4 5 6 7">
            <period single_start="13:32" when_holiday="ignore_holiday"/>
        </day>
    </weekdays>
</schedule>
  • オーダー設定ファイル XML Element <run_time>
    • ここで初めてタイムゾーンが設定できます、サーバ設定時間がUTCでも動くので楽です
    • <run_time schedule="スケジュール設定ファイル"> でジョブの実行時間をスケジュール設定ファイルに委任します
sample_chain,sample.order.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<order >
    <run_time schedule="sample" time_zone="Asia/Tokyo" />
</order>
  • ジョブチェイン設定ファイル
    • 実際はこの中で連続したジョブを設定したりするのですが、今回はサンプルなのでほぼ空です
sample_chain.job_chain.xml
<?xml version="1.0" encoding="ISO-8859-1"?>


<job_chain orders_recoverable="yes" visible="yes">

    <job_chain_node  state="sample" job="sample" next_state="end" error_state="end" on_error="setback"/>

    <job_chain_node  state="end"/>

</job_chain>
3
4
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
3
4