# 2.37. スケジューラ機能の設定

## 2.37.1. スケジューラ機能

スケジューラ機能は、指定した時刻または指定した時間間隔で、事前に設定しておいたコマンド群を自動的に実行する機能です。コンフィグモードで投入可能なコマンドほぼすべてに対応しており、設定の変更やログ情報の取得などが行えます（ログ情報はsyslog機能を使用して取得します）。

## 2.37.2. スケジューラ機能の設定

### 2.37.2.1. スケジューラ機能の基本設定

スケジューラ機能は、次のコマンドで設定します。

> 項目 | 説明
> --- | ---
> command-action list | コマンドリストの設定
> command | 実行コマンドの設定
> scheduler timetable | 実行日時・間隔の設定

まず、command-action listコマンドでアクションリストコンフィグモードに遷移し、実行したいコマンドを実行順にcommandで設定します。通常のコンフィグと異なりコマンドの補完機能は働きませんので、誤入力に気をつけてください。

また、コマンドは常にグローバルコンフィグモードから開始されます。各種モード遷移のコマンドも投入可能です。

次にscheduler timetableコマンドで実行日時や実行間隔を設定すると、指定したスケジュールでコマンドリストのコマンドが連続実行されます。timetableコマンドは複数設定可能です。timetableコマンドの詳細な設定方法は、次の項目で詳しく説明します。

> リスト 2.37.1 設定例

>     scheduler timetable cmdlist1 datetime 18 00 fri
>     command-action list cmdlist1
>      command 1 device GigaEthernet2
>      command 2 port 1 shutdown

指定したスケジュールは以下のコマンドで確認できます。

> 項目 | 説明
> --- | ---
> show scheduler timetable | 実行スケジュールの表示

コマンドリストは以下のコマンドでスケジュール指定することなく即時実行させることもできます。

> 項目 | 説明
> --- | ---
> command-action execute | 即時実行

注釈

スケジューラによるコマンド実行時にコンフィグモードで作業しているユーザーがいる場合、ユーザー側の動作に影響があります（詳細は注意事項を参照してください）。

### 2.37.2.2. スケジューラ機能のタイムテーブル設定（時間間隔設定）

スケジューラ機能のタイムテーブルの設定は、時間間隔の指定と、日時の指定の2つの方法があります。時間間隔指定する場合の設定方法は次のとおりです。

> リスト 2.37.2 設定例：1時間間隔でコマンドを実行

>     scheduler timetable cmdlist1 interval hour 1

> リスト 2.37.3 設定例：10分間隔でコマンドを実行

>     scheduler timetable cmdlist1 interval minute 10

### 2.37.2.3. スケジューラ機能のタイムテーブル設定（時刻設定）

スケジューラ機能のタイムテーブルを時刻指定する場合の設定方法です。

年月日や曜日、時分などで設定し、省略または * で設定された項目はすべての条件が合致します。範囲指定はありませんが、複数の設定が投入可能です。

> リスト 2.37.4 設定例：毎月1日のAM8:30にコマンドを実行

>     scheduler timetable cmdlist1 datetime 8 30 1

> リスト 2.37.5 設定例：毎時30分にコマンドを実行

>     scheduler timetable cmdlist2 datetime * 30

> リスト 2.37.6 設定例：指定した日時に1度だけ実行（2025年1月1日0:00）

>     scheduler timetable cmdlist3 datetime 0 0 1 1 2025

> リスト 2.37.7 設定例：月曜から金曜までのAM8:00にコマンドを実行

>     scheduler timetable cmdlist4 datetime 8 0 mon
>     scheduler timetable cmdlist4 datetime 8 0 tue
>     scheduler timetable cmdlist4 datetime 8 0 wed
>     scheduler timetable cmdlist4 datetime 8 0 thu
>     scheduler timetable cmdlist4 datetime 8 0 fri

### 2.37.2.4. スケジューラ機能の時刻指定とNTPによる時刻変更

NTPやclockコマンドにより、スケジューラ機能が動作する直前に実行時刻を過ぎてしまうことや、動作した直後に時刻が戻ってしまうことがあります。

大きく時刻を変更した場合には単純にスケジュールを再計算しますが、内部時計とのズレやうるう秒などによって短時間の時刻補正が行われた場合には、その補正の影響を受けないように動作します。

時刻変更の詳細な動作仕様を毎朝8:00にコマンドを実行する例で説明します。

コマンド実行直前で時刻が進む場合

コマンド実行直前に時刻が進んだ場合（3分以内）、その間のコマンドをすべて実行します。時刻が補正されなかった場合と同じように動作します。

コマンド実行直後に時刻が戻る場合

コマンド実行直後に時刻が戻った場合（3分以内）、スケジュールは再計算しません。次に実行されるのは時刻が戻る前に予定していた翌日の8:00:00です。時刻が補正されなかった場合と同じように動作します。

大きく時刻を変更した場合

3分以上の時刻変更を行った場合は時刻補正ではないと判断し、進む場合も戻る場合も、その間のコマンドは実行せず、常にスケジュールを再計算します。

これらにより、時刻補正とコマンド実行タイミングが重なっても、その影響は受けません。

なお、スケジュールを時間間隔で指定している場合は、NTPなどによる時刻補正の影響は受けません。経過時間で判定するためです。

### 2.37.2.5. コマンドリスト実行の一時中断

コンフィグモードで作業する必要がある場合、スケジューラ等によるコマンド実行を一時的に中断させることができます。EXECモードで以下のコマンドを実行してください。なお、コマンドリストの実行が一時中断されている間はコマンドが実行されないだけで、時間間隔指定のスケジュールが間延びする等の影響はありません。

> 項目 | 説明
> --- | ---
> scheduler suspend | スケジューラ中断
> scheduler resume | スケジューラ中断解除
> command-action stop | コマンドリスト中断
> command-action start | コマンドリスト中断解除

中断機能は再開忘れ防止のため、中断時間を入力して利用してください。

> リスト 2.37.8 設定例：中断の解除を忘れても10分後にスケジューラを再開する設定

>     scheduler suspend 10

### 2.37.2.6. コンフィグモードで作業中の場合のスケジューラ機能の影響

スケジューラ機能はコマンド実行をコンフィグモードを占有して行うため、指定時刻にコンフィグモードで作業しているユーザーは、以下のような影響を受けます。長時間の作業を行う場合は、できるだけ影響のない時間帯に作業するか、コマンドリストの実行を一時的に中断する機能を利用して作業してください。

- グローバルコンフィグモード以外のコンフィグモードにいる場合は、グローバルコンフィグモードに強制的に遷移します。

- コマンド入力中の場合は、入力内容が破棄されます。

- showコマンド表示中やpingコマンド実行中など、コマンド実行中の場合はキャンセルされます。

- スケジューラ機能のコマンド投入がすべて完了するまでコマンドは受け付けられません。ctrl + Zでコンフィグモードから抜けることは可能です。

### 2.37.2.7. スケジューラ機能・コマンドリストの注意事項

- 同じコマンドリストを同一時刻に複数実行するように設定しても1度しか動作しません。 1つのコマンドリストに「毎月 1 日 8:00 に実行」「月曜 8:00 に実行」の2つが設定されていた場合、月の初日が月曜でもそれ以外でも 8:00 には1度しか起動されません。時間指定と時刻指定が重なったときも同様です。

- commandで指定するコマンドは省略せずに設定してください。 省略して登録することは可能ですが、現時点で一意に決定できる省略形でもバージョンアップによりコマンドや入力パラメータが追加されると、選択肢が増えて補完できなくなる可能性があるためです。

- コマンドリストで実行不可能なコマンド

  > 以下のコマンドはコマンドリストでは実行できません。

  > - command-action start, command-action stop

  > - scheduler suspend, scheduler resume

  > - service config

  > - show syslog

  > - password

  > - pki

  > - グローバルコンフィグモードの exit

  > - 対話形式で yes/no やパスワードなどの入力を求められるコマンド（以下は除く）

  >   - reload

  >   - erase default-config（コマンドの後ろに”yes”を指定した場合）

  >   - erase startup-config（コマンドの後ろに”yes”を指定した場合）