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>