JobSchedulerでスケジュール実行
cronで実行しているスクリプトを単独のジョブから実行するのはできたので、JobSchedulerからチェーンをスケジュール実行する設定をしました。
ジョブファイルの修正
ジョブジェーンに組み込むにはOrderJobにする必要があるので、既存のジョブファイルを修正。
修正前
<job title="backup_files_local" process_class="/test/test_single_process">
修正後
<job title="backup_files_local" process_class="/test/test_single_process" order="yes">
こんな感じで、order="yes"を追加。
ファイルが増えてきて視認性が落ちたので、ファイル名を付け替えて、OrderJob用のサブディレクトリ作って放り込みました。
OrderJobに変更すると、ジョブ名の前のアイコンが"●"に変わり、"タスク即時実行"ができなくなりますが、curlで叩くと、force_start="yes"のおかげなのか実行できます。
なんとなく腑に落ちない挙動。
cronで動かしているスクリプトをチェーンでまとめる
- MySQL*2、PostgreSQLのバックアップ
- Oracleの起動確認とバックアップ
- ファイルのバックアップ
- 別なサーバへのsyncとZabbix_housekeeper
の4つに分け、実行するためのオーダーとスケジュールはチェーン内ではなく、別に定義することに。
JOE
せっかくなのでJOEを使ってみようと思いましたが、実際に出力されたXMLには親タグが入っており、JOCではエラーとみなされるので手で書くことにしました…
チェーンの設定
MySQL+PostgreSQLバックアップのチェーン
<job_chain name="chain_mysql_pgsql" title="chain_mysql_pgsql" max_orders="10" process_class="/test/test_single_process">
<job_chain_node state="Step1" job="/test/orderjob/backup_db_mysql" next_state="Step2" error_state="Step2"/>
<job_chain_node state="Step2" job="/test/orderjob/backup_db_mysql_remote" next_state="Step3" error_state="Step3"/>
<job_chain_node state="Step3" job="/test/orderjob/backup_db_pgsql" next_state="End" error_state="End"/>
<job_chain_node state="End"/>
</job_chain>
Oracleバックアップのチェーン
<job_chain name="chain_oracle" title="chain_oracle" max_orders="10" process_class="/test/test_single_process">
<job_chain_node state="Step1" job="/test/orderjob/check_db_oracle" next_state="Step2" error_state="Step2"/>
<job_chain_node state="Step2" job="/test/orderjob/backup_db_ora" next_state="End" error_state="End"/>
<job_chain_node state="End"/>
</job_chain>
ファイルバックアップのチェーン
<job_chain name="chain_file" title="chain_file" max_orders="10" process_class="/test/test_single_process">
<job_chain_node state="Step1" job="/test/orderjob/backup_svn" next_state="Step2" error_state="Step2"/>
<job_chain_node state="Step2" job="/test/orderjob/backup_files" next_state="Step3" error_state="Step3"/>
<job_chain_node state="Step3" job="/test/orderjob/backup_files_remote" next_state="End" error_state="End"/>
<job_chain_node state="End"/>
</job_chain>
最終処理のチェーン
<job_chain name="chain_final" title="chain_final" max_orders="10" process_class="/test/test_single_process">
<job_chain_node state="Step1" job="/test/orderjob/sync_fsv" next_state="Step2" error_state="Step2"/>
<job_chain_node state="Step2" job="/test/orderjob/zabbix_housekeeper" next_state="End" error_state="End"/>
<job_chain_node state="End"/>
</job_chain>
全実行のnestチェーン
<job_chain title="_all_chain">
<job_chain_node.job_chain state="Chain_01" job_chain="chain_mysql_pgsql" next_state="Chain_02" error_state="Chain_02"/>
<job_chain_node.job_chain state="Chain_02" job_chain="chain_file" next_state="Chain_03" error_state="Chain_03"/>
<job_chain_node.job_chain state="Chain_03" job_chain="chain_oracle" next_state="Chain_04" error_state="Chain_04"/>
<job_chain_node.job_chain state="Chain_04" job_chain="chain_final" next_state="End" error_state="End"/>
<job_chain_node.end state="End"/>
</job_chain>
チェーン内ではチェーン+ジョブの混在ができないようなので、nestチェーンにして、複数のチェーンを順次実行する形を取りました。
スケジュールの設定
config/live/test/exec_everyday_00oclock.schedule.xml
<schedule name="everyday_00oclock">
<weekdays>
<day day="1 2 3 4 5 6 7">
<period single_start="00:00" when_holiday="ignore_holiday"/>
</day>
</weekdays>
</schedule>
config/live/test/exec_everyday_12oclock.schedule.xml
<schedule name="everyday_12oclock">
<weekdays>
<day day="1 2 3 4 5 6 7">
<period single_start="12:00" when_holiday="ignore_holiday"/>
</day>
</weekdays>
</schedule>
- 月~日
- 祝日は考慮しない
- 実行時刻は0時、12時
<schedule name="everyday_00oclock">
<weekdays>
<day day="1 2 3 4 5 6 7">
<period single_start="00:00" when_holiday="ignore_holiday"/>
</day>
</weekdays>
</schedule>
<schedule name="everyday_12oclock">
<weekdays>
<day day="1 2 3 4 5 6 7">
<period single_start="12:00" when_holiday="ignore_holiday"/>
</day>
</weekdays>
</schedule>
としています。
オーダーの設定
チェーンを実行するためのオーダー設定ファイルをチェーンのファイルと同じディレクトリに作成。
ファイル名は以下のフォーマット
チェーン名+","+オーダーID.order.xml
スケジュールを別定義にしたので、run_timeには時刻を記述せず。
<order job_chain="/test/jobchain/chain_mysql_pgsql">
<run_time />
</order>
<order job_chain="/test/jobchain/_all_chain">
<run_time />
</order>
スケジュールとオーダーの紐付け
あとはオーダーを右クリックして、スケジュールと紐づけ。
Author And Source
この問題について(JobSchedulerでスケジュール実行), 我々は、より多くの情報をここで見つけました https://qiita.com/ryouma_nagare/items/0f38e21295bfebf50568著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .