[CentOS6][SOS JobScheduler] カレンダーを設定する


Create: 2013/03/24
LastUpdate: 2013/05/27
[ メニューに戻る ]

下図の環境を使用します。
環境の詳細を知りたい場合は、メニューに戻って構築手順を参照してください。


JobScheduler では、任意のカレンダーを作成してジョブの実行時間を指定できます。
ここでは、以下のようなカレンダーを作成して、営業日の20:00 に実行するジョブを定義してみます。
  • 営業日を月曜日~金曜日に設定する。
  • 祝日を、2日分だけ設定する。(確認用)
手順については、「Reference Documentation」を参考にしました。

1.カレンダーの定義


まず、新規でカレンダーを作成します。
JOEの左側のメニューで [Schedules] をクリックすると下図の画面が表示されます。
[New Schedule]ボタンをクリックして新しいカレンダーを作成します。


起動時刻を設定します。
左側のメニューで、新しく作成された [schedule1] → [Every Day] をクリックすると下図の画面が表示されます。
[New Period] ボタンをクリックして、以下の新しい起動時刻を入力します。
  • [Start Time] で "Single Start" を選択して、"20:00:00" を設定します。これで、Weekday の 20:00 に起動されます。
  • [When Holiday] で "next non holiday" を選択します。これで休日の場合は、翌営業日にスケジューリングされます。
入力が終わったら、[Apply Period]ボタンをクリックします。


下図のように表示されたらOKです。


任意の Weekday として、月曜日~金曜日まで設定します。
左側のメニューで、[any Weekday] をクリックすると下図の画面が表示されます。
[Weekdays]で曜日を指定して、[Add Weekday]ボタンをクリックします。


テスト用に "2013/3/25" と "2013/3/26" を休日に設定します。
左側メニューで [Non Working Days]をクリックすると下図の画面が表示されます。
[Holidays] で日付を指定して、[Add Date]ボタンをクリックします。


2.ジョブの定義


上記1で作成したカレンダーを使用するようにジョブを設定します。
左側のメニューで [Run Time] をクリックします。
[Schedule] で "schedule1" を選択します。
ちなみに、[Schedule]でカレンダーを適用すると、ジョブ個別の [Run Time] の設定はできなくなります。


以上で、設定は完了です。
[フロッピーディスク]アイコンをクリックして保存すると、スケジューリングされます。

3.計画起動の予定時刻確認


JOCでジョブの計画起動の日時を見ると、下図のように表示されます。
[Run time defined by] にカレンダーの名前が表示されます。
[Next start]に次の起動日時が表示されます。(赤枠)


JOCで確認した日が 2013/3/24(日) の 16:00です。
3/24(日) 20:00 は、Weekday ではないので次のWeekdayへ

3/25(月) 20:00 は、休日なので次のWeekdayへ

3/26(火) 20:00 は、休日なので次のWeekdayへ
というわけで、2013/3/27(水曜) 20:00 が、次の起動日時になります。
[Schedules]タブは、下図のように表示されます。
カレンダーごとに、それを使用しているジョブを見ることができます。


4.運用カレンダーの確認


例えば、1週間後など、将来の起動予定日時を確認したい場合は、Manageサーバにjobsユーザでログインして以下のコマンドを実行します。
以下のコマンドでは、"2013/4/1" ~ "2013/4/9" までの予定を表示しています。
<show_calendar/>の詳細は、「Reference Documentation」を参照してください。
$ sos-berlin.com/jobscheduler/scheduler/scheduler_home/bin/jobscheduler.sh command "<show_calendar from='2013-04-01T00:00:00' before='2013-04-10T00:00:00'/>" | xmllint --format -
<?xml version="1.0" encoding="ISO-8859-1"?>
<spooler>
  <answer time="2013-03-28 09:45:44.016">
    <calendar>
      <at at="2013-04-01T20:00:00" job="/sos/update/scheduler_check_updates"/>
      <at at="2013-04-08T20:00:00" job="/sos/update/scheduler_check_updates"/>
      <at at="2013-04-01T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-02T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-03T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-04T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-05T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-06T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-07T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-08T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-09T00:00:01" job="/sos/dailyschedule/CreateDaysSchedule"/>
      <at at="2013-04-01T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-02T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-03T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-04T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-05T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-08T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <at at="2013-04-09T20:00:00" schedule="/test/schedule1" job="/test/shell_job"/>
      <period begin="2013-04-01T00:00:00" end="2013-04-02T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-02T00:00:00" end="2013-04-03T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-03T00:00:00" end="2013-04-04T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-04T00:00:00" end="2013-04-05T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-05T00:00:00" end="2013-04-06T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-06T00:00:00" end="2013-04-07T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-07T00:00:00" end="2013-04-08T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-08T00:00:00" end="2013-04-09T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
      <period begin="2013-04-09T00:00:00" end="2013-04-10T00:00:00" repeat="1800" job="/sos/dailyschedule/CheckDaysSchedule"/>
    </calendar>
  </answer>
</spooler>
<show_calendar/>コマンドはJOCでも実行できます。
上記と同じようにコマンドを実行して全体のスケジュールを確認したい場合は、[Menu]ボタンをクリックしてメニューから、[Show start time]をクリックします。
特定のジョブだけ確認したい場合は、下図のように、ジョブを右クリックして、メニューから [Show start time] を選択します。


下図のダイアログが表示されたら、確認したい期間を入力して、[submit]ボタンをクリックします。


下図のように、起動予定日時が表示されます。
出力形式は、"html"、"xml"、"csv" の3パターンから選べます。


ちなにみ、下図のように JID でも確認できます。
ただし、画面で確認できるのは、設定変更の翌日からです。
JID に表示する情報は、毎日 00:00:01 に起動する /sos/dailyschedule/CreateDaysSchedule と、/sos/dailyschedule/CheckDaysScheduleで生成しているようです。
この2つを即時実行すれば、JIDに表示している情報を更新できます。


なお、私が試した限りでは、7日間しか表示できませんでした。



■ 補足

上記のように設定したスケジュールとは別に、ある期間、一時的に、スケジュールを変えたい場合、代替スケジュールを適用することができます。
たとえば、月曜日~金曜日の10:00 に起動する代替スケジュール(schedule2)を作成し、上記で作成した schedule1 の代替として 4/2 と 4/3の2日間だけschedule2を適用することができます。
まず、上記で作成した schedule1 は、XML定義で見ると以下のようになります。
この定義は、このまま使用します。
<schedule>
  <period when_holiday="next_non_holiday" single_start="20:00"/>
    <weekdays>
      <day day="1"/>
      <day day="2"/>
      <day day="3"/>
      <day day="4"/>
      <day day="5"/>
    </weekdays>
    <holidays>
      <holiday date="2013-03-25"/>
      <holiday date="2013-03-26"/>
    </holidays>
</schedule>
次に、schedule1 の代替スケジュールとして schedule2 を、以下のように定義します。
schedule2 は、月曜日~金曜日の10:00 に起動し、代替スケジュールとして適用する期間は、4/2 と 4/3 の2日間です。
<schedule substitute="/test/schedule1" valid_from="2013-04-02 00:00:00" valid_to="2013-04-03 24:00:00">
  <period when_holiday="next_non_holiday" single_start="10:00"/>
    <weekdays>
      <day day="1"/>
      <day day="2"/>
      <day day="3"/>
      <day day="4"/>
      <day day="5"/>
    </weekdays>
</schedule>
これを JOC の [Schedule]タブで見てみると、下図のとおり。
表示時点でアクティブなスケジュールが緑色でマークされます。


起動予定日時を見てみると、下図のとおり、4/2 と 4/3 は 代替スケジュールを適用して 10:00 に起動するようになっています。