kronはCisco IOSにて定期実行タスクを実行する機能です。LinuxのcronやWindowsのタスクスケジューラーに相当する機能です。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# kron policy-list <policy_name> Router(config-kron-policy)# cli <command> Router(config)# kron occurrence <occurrence> [{ at <hh:mm> | in <hh:mm> }] [{ recurring | oneshot }] Router(config-kron-occurrence)# policy-list <command>
構成図
以下の構成で動作確認を行います。Dynamips上のR1とHost OSのLoopback Adapterを接続します。また、Host OSではTFTP Serverを起動させ、R2はDHCP Serverとして動作させます。
TFTP Server DHCP Server Lo0 e0/1 e0/0 e0/1 +--------+.101 .1+--------+dhcp .2+--------+ | Host +--------+ R1 +--------+ R2 | +--------+ +--------+ +--------+ 192.168.1.0/24 192.168.12.0/24 R1 Loopback0 R2 Loopback0 R3 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32
[R2] ip dhcp excluded-address 192.168.12.2 192.168.12.254 ! ip dhcp pool VLAN12 network 192.168.12.0 255.255.255.0 default-router 192.168.12.2
設定全文は下記ファイルです。詳細設定は下記を参照ください。
kron
仕様説明
以下要領で定期実行したいコマンドを定義します。
Router(config)# kron policy-list <policy_name> Router(config-kron-policy)# cli <command>
以下要領でコマンドを実行する時間を定義します。atで実行時刻を指定し、inで実行間隔を定義します。recurringを指定すると何度も実行するようになり、oneshotを指定すると1回のみ実行します。
Router(config)# kron occurrence <occurrence> [{ at <hh:mm> | in <hh:mm> }] [{ recurring | oneshot }] Router(config-kron-occurrence)# policy-list <command>
時刻指定
21:05にrunnning-configをTFTP Serverにバックアップする設定を試みます。まず、時刻を設定します。
[R1] clock set 21:00:00 Nov 21 2012
次にバックアップコマンドを定義します。なお、KronやEEMではcopyコマンドは使用不可である事に注意して下さい。
[R1] kron policy-list CMD_COPY_RUN cli show running-config | redirect tftp://192.168.1.101/r1.cfg kron occurrence CRON_COPY_RUN at 21:05 recurring policy-list CMD_COPY_RUN
以下showコマンドにより、実行予定のコマンドを確認します。
[R1] R1#show kron schedule Kron Occurrence Schedule CRON_COPY_RUN inactive, will run again in 0 days 00:00:08 at 21:05 on R1#
以下debugコマンドにより、Kronが想定通りに実行された事を確認します。
[R1] R1#debug kron all All kron debug flags are on R1# R1# Nov 21 21:05:37.547: Major 1, Minor 0 Nov 21 21:05:37.547: Timer Event CRON_COPY_RUN Nov 21 21:05:37.551: Kron delay for next CRON_COPY_RUN 86400000 Nov 21 21:05:37.555: Call parse_cmd 'show running-config | redirect tftp://192.168.1.101/r1.cfg' Nov 21 21:05:38.907: Kron CLI return 0 ' **CLI 'show running-config | redirect tftp://192.168.1.101/r1.cfg': !' Nov 21 21:05:38.919: Major 4, Minor 7 Nov 21 21:05:38.919: Respond to end of CLI Process R1#
実行間隔指定
2分間隔でDHCP requestを送信する設定を試みます。R1に以下設定を投入して下さい。
[R1] kron policy-list CMD_RENEW_DHCP cli renew dhcp Ethernet 0/0 kron occurrence CRON_RENEW_DHCP in 00:02 recurring policy-list CMD_RENEW_DHCP
R1, R2のそれぞれのdebugメッセージから2分間隔でDHCP requestが送信されている事を確認します。
[R1] R1#debug kron all All kron debug flags are on R1# R1# R1# Nov 21 21:13:07.559: Major 1, Minor 0 Nov 21 21:13:07.559: Timer Event CRON_RENEW_DHCP Nov 21 21:13:07.559: Kron delay for next CRON_RENEW_DHCP 120000 Nov 21 21:13:07.571: Call parse_cmd 'renew dhcp Ethernet 0/0' Nov 21 21:13:07.583: Kron CLI return 0 '' Nov 21 21:13:07.591: Major 4, Minor 7 Nov 21 21:13:07.595: Respond to end of CLI Process Nov 21 21:15:07.559: Major 1, Minor 0 Nov 21 21:15:07.559: Timer Event CRON_RENEW_DHCP Nov 21 21:15:07.563: Kron delay for next CRON_RENEW_DHCP 120000 Nov 21 21:15:07.575: Call parse_cmd 'renew dhcp Ethernet 0/0' Nov 21 21:15:07.587: Kron CLI return 0 '' Nov 21 21:15:07.595: Major 4, Minor 7 Nov 21 21:15:07.599: Respond to end of CLI Process R1# [R2] R2#debug ip dhcp server events DHCP server event debugging is on. R2# R2# *Mar 1 00:28:01.531: DHCPD: Sending notification of ASSIGNMENT: *Mar 1 00:28:01.535: DHCPD: address 192.168.12.1 mask 255.255.255.0 *Mar 1 00:28:01.535: DHCPD: htype 1 chaddr cc00.106c.0000 *Mar 1 00:28:01.539: DHCPD: lease time remaining (secs) = 86400 *Mar 1 00:28:05.583: DHCPD: checking for expired leases. R2# *Mar 1 00:30:01.783: DHCPD: Sending notification of ASSIGNMENT: *Mar 1 00:30:01.787: DHCPD: address 192.168.12.1 mask 255.255.255.0 *Mar 1 00:30:01.791: DHCPD: htype 1 chaddr cc00.106c.0000 *Mar 1 00:30:01.791: DHCPD: lease time remaining (secs) = 86400 *Mar 1 00:30:05.583: DHCPD: checking for expired leases. *Mar 1 00:32:01.891: DHCPD: Sending notification of ASSIGNMENT: *Mar 1 00:32:01.891: DHCPD: address 192.168.12.1 mask 255.255.255.0 *Mar 1 00:32:01.895: DHCPD: htype 1 chaddr cc00.106c.0000 *Mar 1 00:32:01.895: DHCPD: lease time remaining (secs) = 86400 *Mar 1 00:32:05.583: DHCPD: checking for expired leases. R2#
Tips
対話形式コマンド
Kronは対話形式のコマンドと相性が悪いです。例えば、copyコマンドは転送先のホスト名などを対話形式で確認するので、対話コマンドとkronの併用は避けましょう。
動作確認として、R1に以下のようなcopyコマンドを用いたKronを登録します。
[R1] clock set 21:00:00 Nov 21 2012 no kron occurrence CRON_COPY_RUN at 21:05 recurring no kron policy-list CMD_COPY_RUN kron policy-list CMD_COPY_RUN cli copy running-config tftp://192.168.1.101/r1.cfg kron occurrence CRON_COPY_RUN at 21:05 recurring policy-list CMD_COPY_RUN
debugメッセージを出力させると、copyに失敗している事が分かります。
[R1] R1#debug kron all All kron debug flags are on R1# R1# Nov 21 21:05:06.023: Major 1, Minor 0 Nov 21 21:05:06.023: Timer Event CRON_COPY_RUN Nov 21 21:05:06.027: Kron delay for next CRON_COPY_RUN 86400000 Nov 21 21:05:06.039: Call parse_cmd 'copy running-config tftp://192.168.1.101/r1.cfg' Nov 21 21:05:06.063: Kron CLI return 0 ' **CLI 'copy running-config tftp://192.168.1.101/r1.cfg': Address or name of remote host [192.168.1.101]? ?Bad address or host name%Error parsing filename (Unknown error 0)' Nov 21 21:05:06.075: Major 4, Minor 7 Nov 21 21:05:06.075: Respond to end of CLI Process Nov 21 21:05:06.075: Forcing Removing Policy CMD_COPY_RUN Nov 21 21:05:06.075: Removing Policy CMD_COPY_RUN Nov 21 21:05:06.075: Removing CLI 'copy running-config tftp://192.168.1.101/r1.cfg' Nov 21 21:05:06.075: Done Removing Policy CMD_COPY_RUN R1#