正規表現オブジェクトを生成する string.regexp 関数を新設した
また、正規表現糖衣構文により、string.regexp 関数を呼び出せるようにした
以下の各関数で、パターンとして正規表現オブジェクトを利用できるようにした
string.find
string.match
string.gmatch
string.gsub
string.split
rt.syslogwatch
文字列をパターンで分割する string.split 関数を新設した
引数列あるいは配列の要素を巡回する each 関数を新設した
Rev.11.00.13
以降
Rev.10.00.60
以降
"1.04"
ハードウェアライブラリで、USBキーボードやUSBバーコードリーダーの出力を読み取れるようにした
Rev.11.00.16
以降
Rev.10.01.32
以降
"1.05"
以下の変更をした
ベースとなる Lua をバージョン 5.1.5 にした
rt.mail 関数で、メール本文の先頭にルーターの情報を挿入するか否かを指定できるようにした
Rev.11.01.06
以降
Rev.11.00.20
以降
Rev.10.01.42
以降
Rev.10.00.61
以降
"1.06"
LuaSocketに対応した
↓
※LuaSocketには非対応
↓
※LuaSocketには非対応
Rev.11.01.09
以降
"1.07"
rt.command 関数で、コマンド実行のログを出力するか否かを指定できるようにした
Rev.14.01.11
以降
Rev.14.00.18
以降
Rev.14.00.18
以降
Rev.11.03.13
以降
Rev.11.01.25
以降
Rev.11.00.28
以降
Rev.10.01.65
以降
"1.08"
以下の変更をした
rt.mail 関数で、SMTPS を用いてメールを送信するか否かを指定できるようにした
rt.httprequest 関数で、以下に対応した
SSL による通信をできるようにした
認証方式にBearer 認証を指定できるようにした
Rev.15.02.03
以降
Rev.15.01.09
以降
Rev.15.00.10
以降
Rev.14.01.26
以降
Rev.14.00.26
以降
Rev.14.00.26
以降
Lua タスク ...
Lua スクリプトを実行するためにルーターの OS に用意されている専用のタスクです。
lua コマンド
用に 8 個、DOWNLOAD ボタンからの実行用に 1 個、Lua コンパイラ用に 1 個の計10個 (*1) が予め用意されています。それぞれのタスクは独立しているので Lua タスクの最大数まで同時走行が可能です。
(*1) DOWNLOAD ボタン非搭載機種、および、SRT100では、DOWNLOADボタンからの実行用のタスクを除く、9個のタスクが用意されています。
シリアルコンソール、および、TELNET / SSH クライアントからの lua コマンド実行
リモートセットアップ機能を利用した lua コマンド実行
GUI のコマンド実行画面からの lua コマンド実行
schedule at コマンドを利用した lua コマンドの自動実行 ( 定時実行やルーター起動時の実行など )
DOWNLOAD ボタンの長押し ( DOWNLOAD ボタン非搭載機種、および、SRT100 を除く )
lua コマンド
の実行例を下記に挙げます。
(例 1) 外部メモリのスクリプトファイルを実行する。
# lua usb1:/sample.lua
(例 2) コマンドラインに記述したスクリプトを実行する。
# lua -e 'for i = 1, 10 do rt.command("no ip filter " .. i) end'
(例 3) 複数のスクリプトを連続的に実行する。
# lua -e 'rt.command("clear log")' -e 'rt.syslog("info", "スクリプト開始")' usb1:/sample.lua
lua コマンド
は、指定した Lua スクリプトを開始させるトリガーに過ぎないため、Lua スクリプトの終了を待たずにコマンドプロンプトが返ります。そのため、同一コンソール上から連続的に同コマンドを実行して複数の Lua スクリプトを立ち上げることが可能です。ただし、同時に走行可能な Lua スクリプトの上限数は 8 です。Lua スクリプト機能では 1 度の
lua コマンド
実行につき 1 つの Lua タスクが割り当てられるため、同時に走行しているスクリプトの数だけ Lua タスクが使用されることになります。なお、(例 3) のように、1 度の
lua コマンド
で複数の Lua スクリプトを指定する場合は、複数の Lua スクリプトが 1 つの Lua タスク内で指定した順番に実行されます。Lua スクリプトの走行状態や過去の実行状況などは
show status lua コマンド
から確認できます。また、走行中の Lua スクリプトを強制終了させたいときは、
terminate lua コマンド
を使用します。
実行した lua コマンドや Lua スクリプトの中に文法エラーがあった場合は、INFO タイプのエラーメッセージが SYSLOG に出力され、スクリプトの実行が中断されます。
[SYSLOG例]
2009/09/21 12:20:07: lua: mail.lua:26: 'rt.mail': 'text' field value of argument #1 is invalid.
また、スクリプトファイルの重複チェック等は行われないため、同時に同一のスクリプトファイルを指定して
lua コマンド
を実行した場合は、同一のスクリプトファイルが複数の Lua タスクで走行することになります。操作ミスをした場合は、
terminate lua コマンド
で不要な Lua タスクを強制終了させてください。
DOWNLOAD ボタンによる実行について ( DOWNLOAD ボタン非搭載機種、および、SRT100 を除く )
DOWNLOAD ボタンからはスクリプトファイルを 1 つだけ実行させることができます。
lua コマンド
のような複雑な操作は行えません。
DOWNLOAD ボタンを使用して Lua スクリプトを開始させる場合は 1 つの Lua タスクしか割り当てられません。ただし、
lua コマンド
の実行時に割り当てられる 8 個の Lua タスクとは別に DOWNLOAD ボタン専用の Lua タスクが用意してあるため、
lua コマンド
用の Lua タスクに空きが無くても、DOWNLOAD ボタンから Lua スクリプトを開始させることができます。DOWNLOAD ボタンによる実行方法について下記に述べます。(※1)
operation button function download コマンド
(※2)で Lua スクリプトの実行を DOWNLOAD ボタンの機能に割り当てておきます。
DOWNLOAD ボタンを 3 秒以上押すと Lua スクリプトが開始されます。
このとき "ピ" とアラームがなり、DOWNLOAD ランプが点滅を始めます。そして、Lua スクリプトが終了したときに "ピポピポ" とアラームがなり、DOWNLOAD ランプが消灯します。
Lua スクリプトの走行を途中で停止させたい場合は、DOWNLOAD ボタンを 1 秒以上押します。Lua スクリプトの走行が停止すると DOWNLOAD ランプが消灯します。このとき、DOWNLOAD ボタンを 3 秒以上押し続けると再度 Lua スクリプトが開始されてしまうので、DOWNLOAD ランプが消灯したらボタンから手を放してください。
なお、DOWNLOAD ボタンにより開始されたスクリプトも
terminate lua コマンド
で停止させることができます。この場合は、Lua スクリプトが停止したときに "ププププ" とアラームがなり、DOWNLOAD ランプが消灯します。
Lua スクリプトがエラー終了した場合は、"ププププ" とアラームがなり、DOWNLOAD ランプが点灯します。
このとき、DOWNLOAD ボタンを 1 秒以上押すとエラー状態が解除され、DOWNLOAD ランプが消灯します。
DOWNLOAD ボタンにより開始された Lua スクリプトがまだ走行中のときに
operation button function download コマンド
(※2)を実行した場合は、パラメータ変更の有無に関わらず、走行中の Lua スクリプトは強制終了されます。
(※1) DOWNLOAD ランプがない機種では、DOWNLOAD ランプの点灯、点滅はありません。
(※2) FUNCボタンが搭載されている機種では、
operation button function funcコマンド
を使用してください。
常駐型の Lua スクリプトについて
専用の Lua タスクで実行されるため、プログラムに終了がない常駐型の Lua スクリプトを走行させることが可能です。Lua タスクは CPU リソースの使用に制限を設けていますが、実行するスクリプトの内容によっては CPU 使用率が 100% 近く上がることがあります。したがって、スクリプトプログラムの方でも CPU 使用率が高くならないような配慮が必要です (
注意事項
参照 )。
ファイル I / O
スクリプトファイルはルーター内蔵のフラッシュ ROM ( RTFS )、または、外部メモリに保存できます。RTFS とは、ルーター内蔵のフラッシュ ROM 上に構築されているファイルシステムのことです。
lua コマンド
や
operation button function download コマンド
(※)でスクリプトファイルを指定する場合は、その格納場所を絶対パス、もしくは、環境変数
PWD
からの相対パスで指定します。絶対パス指定では、外部メモリを指すファイルパスには搭載している外部メモリポートに従い "usb1:" 、 "sd1:" というようなプレフィックスを付けます。外部メモリを示すプレフィックスが記述されていない場合は、RTFS を示すファイルパスと判別されます。相対パス指定では、環境変数
PWD
により、外部メモリと RTFS のいずれかに判別されます。なお、スクリプトファイルの暗号化には対応していません。
(※) FUNCボタンが搭載されている機種では、
operation button function funcコマンド
を使用してください。
ファイルシステムの操作方法は技術資料 (
RTFS
/
外部メモリの利用
) を参考にしてください。
(例 1) 内蔵フラッシュ ROM のスクリプトファイルを絶対パスで指定する。
# lua /lua/sample.lua
(例 2) 外部メモリのスクリプトファイルを絶対パスで指定する。
# lua usb1:/lua/sample.lua
(例 3) DOWNLOAD ボタンにより実行するスクリプトに外部メモリのスクリプトファイルを絶対パスで設定する。
# operation button function download execute lua usb1:/lua/sample.lua
(例 4) スクリプトファイルを相対パスで指定する。
# lua sample.lua
_RT_LUA_VERSION が "1.0" のファームウェアでは、すべての関数が使用できません。
_RT_LUA_VERSION が "1.01" のファームウェアでは、一部の関数が使用できません。
詳細は
ライブラリ関数
のページを参照してください。
package.loadlib( )
io.popen( )
io.tmpfile( )
file:setvbuf( )
file:seek( )
os.execute( ) ( rt.command( ) で代用できます )
os.setlocale( )
os.tmpname( )
debug.debug( )
使用方法に制限がある関数
dofile( ) / loadfile( )
標準入力には対応していないため、引数のファイル名は必ず指定してください。
require( )
C のモジュールをロードすることはできないため、引数には Lua で記述されたモジュールの名前を指定してください。
string.format( )
書式フォーマットの型変換指定子に e, E / f, F / g, G を使用することはできません。
io ライブラリ ( io.XXX )
標準入力や標準出力には対応していないため、初期状態ではデフォルト入出力ファイルは設定されていません。デフォルト入出力ファイルに対する操作を行う場合は、io.input( )、および、io.output( ) でデフォルト入出力ファイルを予め設定しておく必要があります。なお、標準入力 ( stdin ) / 標準出力 ( stdout ) / エラー出力 ( stderr ) をファイルハンドルとして使用することはできません。
io.open( )
モードに "r+" / "w+" / "a+" のように "+" を付加することはできません。また、
RTFS
は追記モードに対応していないため、オープン対象が内蔵フラッシュ ROM にあるファイルの場合、モードに "a" を指定することはできません。
io.read( ) / file:read( )
書式フォーマットに "*n" を使用することはできません。
os.date( )
isdst には対応していないため、フォーマット引数に "*t" が指定されたときに返すテーブルの isdst フィールドは常に false が設定されています。
os.time( )
isdst には対応していないため、引数のテーブルフィールドに isdst があっても無視されます。
ベースとなる Lua のバージョン ( _VERSION ) からさらに、ルーター独自のカスタマイズを加えた当機能のバージョンが設定されています。当機能の初期リリース時は _RT_LUA_VERSION には "1.0" という文字列が設定されており、当機能の仕様拡張やルーター用 API の追加に伴い、バージョン番号が上がっていきます。_RT_LUA_VERSION_NUM はバージョンを数値で表したもので、上一桁でメジャー番号、下二桁でマイナー番号を示す三桁の整数になっています。"1.0" の場合、_RT_LUA_VERSION_NUM == 100 となります。API を新旧のルーターファームウェアで使い分ける必要がある場合などに、当変数で切り分けることができます。
(例) _RT_LUA_VERSION_NUM により処理を分岐する。
-- スクリプト
if (_RT_LUA_VERSION_NUM >= 200) then
-- 2.0 で対応している API を使う
-- 2.0 より前のバージョンで対応している API を使う
print("_RT_LUA_VERSION : " .. a)
print("_RT_LUA_VERSION_NUM : " .. b)
print("_RT_FIRM_REVISION : " .. c)
print("_VERSION : " .. d)
[実行結果]
_RT_LUA_VERSION : 1.0
_RT_LUA_VERSION_NUM : 100
_RT_FIRM_REVISION : RTX1200 Rev.10.01.12 (Fri Jul 31 17:52:51 2009)
_VERSION : Lua 5.1
# set LUA_INIT=@/lua/init.lua
(例 2) 初期化用スクリプトを設定しておく。設定値に特殊文字が入る場合はダブルクォーテーションまたはシングルクォーテーションで括る必要があります。
# set LUA_INIT='rt.command("clear log")'
PWD には、スクリプトファイルを指す相対パスの基点となるパスを絶対パスで設定します。
lua コマンド
等でスクリプトファイルを相対パスで指定する場合、この PWD が基点になります。末尾の " / " はなくても構いません。
PWD が設定されていない場合は、" / " ( RTFS のルート ) がデフォルトのパスとして使用されます。
(例) スクリプトファイルが置かれているパスを設定しておく。
# set PWD="/lua"
Lua スクリプト機能を有効にするか否かを設定をする。
Lua スクリプトの走行中に当コマンドで Lua スクリプト機能を無効にした場合、走行中のすべての Lua スクリプトは強制終了される。
[初期値]
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
Lua スクリプトを実行する。
基本的な文法は Lua 標準の lua コマンドと同じであるが、標準入力 ( stdin ) をスクリプトの入力対象とする -i / - オプションと、パラメータなしの実行には対応していない。-v オプションはバージョン情報を出力する。-- オプションは記述したポイントでオプション処理を終了することを表し、SCRIPT_FILE や ARGS に "-" で始まるファイル名および文字列を指定できるようになる。なお、-e / -l / -v の各オプションは繰り返して複数個指定できるが SCRIPT_FILE よりも後に指定することはできない。SCRIPT_FILE は 1 つしか指定できず、SCRIPT_FILE を記述したポイント以降のパラメータはすべて無視される。このとき、エラーメッセージは出力されない。
SCRIPT_FILE に相対パスを指定した場合、環境変数 PWD を基点としたパスと解釈される。PWD は
set コマンド
で変更可能であり、初期値は "/" である。
[ノート]
環境変数 LUA_INIT が設定されている場合は、そのスクリプトが最初に実行される。
SCRIPT_FILE にバイトコードファイルを指定する場合、ルーター上で生成したバイトコードだけが実行可能であり、Lua をインストールした PC 等で生成したバイトコードは実行できない。
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
Lua コンパイラを実行し、バイトコードを生成する。
基本的な文法は Lua 標準の luac コマンドと同じであるが、- オプションは指定できない。-l オプションは生成したバイトコードをリスト表示する。-p オプションは構文解析のみを行う。-s オプションはコメント等のデバッグ情報を取り除く。-v オプションはバージョン情報を出力する。-- オプションは記述したポイントでオプション処理を終了することを表し、SCRIPT_FILE に "-" で始まるファイル名を指定できるようになる。なお、SCRIPT_FILE を複数指定して、一つのバイトコードファイルにまとめることもできる。
SCRIPT_FILE / OUTPUT_FILE に相対パスを指定した場合、環境変数 PWD を基点としたパスと解釈される。PWD は
set コマンド
で変更可能であり、初期値は "/" である。
[初期値]
OUTPUT_FILE = luac.out ( 相対パス )
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
現在の Lua スクリプトの走行状態や過去の走行履歴を表示する。この情報は
lua use コマンド
で Lua スクリプト機能を無効にするとクリアされる。
Lua のバージョン情報
走行中のスクリプト [ running ]
Lua タスク番号
RUN ... 走行中
SLEEP ... スリープ中
WATCH ... SYSLOG 監視中 ( Lua タスクはスリープしている )
COMMUNICATE ... 通信中 (
_RT_LUA_VERSION
が "1.02" 以降のファームウェアで表示 )
TERMINATE ... 強制終了中
lua コマンド
luac コマンド
スケジュール
DOWNLOAD ボタン
コマンドライン
スクリプトファイル名
監視文字列 ( SYSLOG 監視中のとき)
開始日時 / 走行時間
過去に走行したスクリプト [ history ] ( 最新10種類まで新しい順に表示 )
lua コマンド
luac コマンド
スケジュール
DOWNLOAD ボタン
コマンドライン
スクリプトファイル名
走行回数 / エラー発生回数 / エラー履歴( 最新5回分まで新しい順に表示 )
前回の開始日時 / 終了時間 / 走行結果
[表示例]
# show status lua
Luaライブラリバージョン: Lua 5.1.4
Luaスクリプト機能バージョン: 1.0
[running]
LuaタスクID (状態): 1 (RUN)
走行トリガー: 'lua' コマンド
コマンドライン: lua test.lua
スクリプトファイル: /lua/test.lua
開始日時: 2009/09/21 16:41:01
経過時間: 6秒
-------------------------------------------------------------------------------
LuaタスクID (状態): 9 (SLEEP)
走行トリガー: DOWNLOADボタンからの実行
スクリプトファイル: usb1:/lua/test2.lua
開始日時: 2009/09/21 16:40:32
経過時間: 35秒
[history]
走行トリガー: DOWNLOADボタンからの実行
スクリプトファイル: usb1:/lua/mail.lua
走行回数: 1
エラー発生回数: 1
エラー履歴:
2009/09/21 16:37:51: lua: mail.lua:36: 'rt.mail': 'smtp_address' field of arg
ument #1 doesn't exist.
初回の開始日時: 2009/09/21 16:37:51
前回の開始日時: 2009/09/21 16:37:51
前回の終了日時: 2009/09/21 16:37:51
前回の走行結果: エラー終了
-------------------------------------------------------------------------------
走行トリガー: 'lua' コマンド
コマンドライン: lua -e "print(rt.command(\"show environment\"))"
走行回数: 3
エラー発生回数: 0
初回の開始日時: 2009/09/21 16:35:47
前回の開始日時: 2009/09/21 16:36:57
前回の終了日時: 2009/09/21 16:36:57
前回の走行結果: 正常終了
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
指定した Lua タスク、または、Lua スクリプトを強制終了する。
第1書式では、TASK_ID で指定された Lua タスクを強制終了する。Lua タスクの番号や実行しているスクリプトについては
show status lua コマンド
で確認できる。
第2書式では、SCRIPT_FILE で指定されたパスとファイル名が完全に一致するスクリプトを実行しているすべての Lua タスクを強制終了する。SCRIPT_FILE に相対パスを指定した場合、環境変数 PWD を基点とする絶対パスに置換された後で対象の Lua タスクの検索が行われる。
lua コマンド
の -e オプションを使用して、スクリプトファイルを使用せずに実行されているような Lua スクリプトを強制終了させる場合は、第1書式を使用する。
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
半角の英数字とアンダースコア "_"が使用できるが、アンダースコアまたは数字を最初の文字にすることはできない。
変数名の長さに制限はないが、set コマンドはコマンドラインの最大長 4095 文字を超えて実行できない。
英字の大文字 / 小文字を区別する。例えば、abc と Abc は別の変数として扱われる。
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000vRXシリーズ
本コマンドでは、DOWNLOAD ボタンによる Lua スクリプトの実行に関するアラーム音を鳴らすか否かの設定ができる。
ハードウェアライブラリでの制御によるアラーム音を鳴らすか否かは、alarm entire コマンドの設定に従う。
RTX1200 は Rev.10.01.16 以降で使用可能。
[初期値]
[適用モデル]
NVR500FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3510
operation button function download FUNCTION [SCRIPT_FILE [ARGS ...]]
no operation button function download [FUNCTION] [SCRIPT_FILE [ARGS ...]]
[設定値]
FUNCTION ...
DOWNLOADボタンを押した時に実行する機能
http revision-up ... HTTPリビジョンアップ
execute batch ... バッチファイルの実行
mobile signal-strength ... 携帯端末の電波の受信レベルの取得
execute lua ... Lua スクリプトの実行
DOWNLOAD ボタンを押した時に実行する機能を設定する。機能実行中は DOWNLOAD ボタンの下のランプが点灯し、機能の実行が完了すると消灯する。
FUNCTION に execute lua を設定した場合、SCRIPT_FILE を必ず指定する必要がある。SCRIPT_FILE に相対パスを指定した場合、環境変数 PWD を基点としたパスと解釈される。PWD は
set コマンド
で変更可能であり、初期値は "/" である。
[ノート]
Lua スクリプトを実行させる場合、環境変数 LUA_INIT が設定されていれば SCRIPT_FILE よりも先に LUA_INIT のスクリプトが実行される。
RTX1200 は Rev.10.01.16 以降で使用可能。
[初期値]
http revision-up
[適用モデル]
NVR500FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300
operation button function func FUNCTION [SCRIPT_FILE [ARGS ...]]
no operation button function func [FUNCTION] [SCRIPT_FILE [ARGS ...]]
[設定値]
FUNCTION ...
FUNCボタンを押した時に実行する機能
http revision-up ... HTTPリビジョンアップ
execute batch ... バッチファイルの実行
mobile signal-strength ... 携帯端末の電波の受信レベルの取得
execute lua ... Lua スクリプトの実行
FUNCボタンを押した時に実行する機能を設定する。機能実行中はFUNCボタンの下のランプが点灯し、機能の実行が完了すると消灯する。
FUNCTION に execute lua を設定した場合、SCRIPT_FILE を必ず指定する必要がある。SCRIPT_FILE に相対パスを指定した場合、環境変数 PWD を基点としたパスと解釈される。PWD は
set コマンド
で変更可能であり、初期値は "/" である。
[ノート]
Lua スクリプトを実行させる場合、環境変数 LUA_INIT が設定されていれば SCRIPT_FILE よりも先に LUA_INIT のスクリプトが実行される。
[初期値]
http revision-up
[適用モデル]
RTX3510
schedule at ID [DATE] TIME * COMMAND ..
schedule at ID [DATE] TIME pp PEER_NUM COMMAND ..
schedule at ID [DATE] TIME tunnel TUNNEL_NUM COMMAND ..
schedule at ID [DATE] TIME switch SWITCH COMMAND ..
schedule at ID +TIMER * COMMAND ..
schedule at ID +TIMER pp PEER_NUM COMMAND ..
schedule at ID +TIMER tunnel TUNNEL_NUM COMMAND ..
schedule at ID +TIMER switch SWITCH COMMAND ..
no schedule at ID [[DATE] ..]
[設定値]
... スケジュール番号
... 日付 (省略可)
TIME で指定した時刻、または TIMER で指定した時間後に、 COMMAND で指定されたコマンドを実行する。
第2、第3書式で指定された場合には、それぞれあらかじめ指定された相手先情報番号 / トンネル番号での、 pp select / tunnel select コマンドが発行済みであるように動作する。
schedule at コマンドは複数指定でき、同じ時刻に指定されたものは id の小さな順に実行される。
TIME は hh:mm 形式で指定されたときは秒指定なしとみなされ、hh:mm:ss 形式で指定されたときは秒指定ありとみなされる。秒数に "-" を用いた範囲指定や "*" による全指定をすることはできない。
以下のコマンドは指定できない。
administrator、 administrator password、 cold start、 console info と console prompt を除く console で始まるコマンド、 date、 exit、 help、 http revision-up go、 INTERFACE reset、 less で始まるコマンド、 login password、 login timer、 luac、 ping、 ping6、 pp select、 provider interface dns server、provider INTERFACE name、 quit、 remote setup、 save、 schedule at、 show で始まるコマンド、 telnet、time、 timezone、 traceroute、 traceroute6、 tunnel select
[ノート]
入力時、 COMMAND パラメータに対して TAB キーによるコマンド補完は行うが、シンタックスエラーなどは実行時まで検出されない。 schedule at コマンドにより指定されたコマンドを実行する場合には、何を実行しようとしたかを INFO タイプの SYSLOG に出力する。
DATE に数字と曜日を混在させて指定はできない。
startup を指定したスケジュールはルーター起動時に実行される。電源を入れたらすぐ発信したい場合などに便利。
RT250i では第3 書式は使用できない。
第 4 書式は RTX1300、RTX1220、RTX1210、RTX1200、RTX830、RTX810 で使用可能。
usb-attached を指定できるのは Rev.10.01 系以降である。
TIME パラメータでの秒指定は RTX1200 Rev.10.01.16 以降、および、Rev.11.01 系以降で利用できる。
第 5 〜 8 書式は RTX5000 / RTX3500 Rev.14.00.32 以降、および、RTX1210 Rev14.01.41 以降、NVR700W Rev.15.00.23 以降、RTX830 Rev.15.02.03 以降、RTX1220 Rev.15.04.04 以降、RTX1300、RTX3510 で利用できる。
[設定例]
ウィークデイの 8:00 〜 17:00 だけ接続を許可する
# schedule at 1 */mon-fri 8:00 pp 1 isdn auto connect on
# schedule at 2 */mon-fri 17:00 pp 1 isdn auto connect off
# schedule at 3 */mon-fri 17:05 * disconnect 1
毎時 0 分から 15 分間だけ接続を許可する
# schedule at 1 *:00 pp 1 isdn auto connect on
# schedule at 2 *:15 pp 1 isdn auto connect off
# schedule at 3 *:15 * disconnect 1
今度の元旦にルーティングを切替える
# schedule at 1 1/1 0:0 * ip route NETWORK gateway pp 2
毎日 12 時から 13 時の間だけ 20 秒間隔で Lua スクリプトを実行する
# schedule at 1 12:*:00 * lua script.lua
# schedule at 2 12:*:20 * lua script.lua
# schedule at 3 12:*:40 * lua script.lua
コマンド設定時から10分後に再起動する
# schedule at 1 +600 * restart
[適用モデル]
NVR500SRT100FWX120RTX830RTX810RTX1200RTX1210RTX1220RTX1300RTX3500RTX3510RTX5000NVR510NVR700WvRXシリーズ
------------------------------------------------------------
-- ルーターコマンドを実行し、出力結果を整形して返す関数 --
------------------------------------------------------------
function exec_command(cmd)
local rtn, str
local text
rtn, str = rt.command(cmd)
if (rtn) and (str) then
text = string.format("\"%s\"の実行結果\r\n\r\n%s\r\n", cmd, str)
text = string.format("\"%s\"の実行失敗\r\n\r\n", cmd)
return text
------------------------------------------------------------
-- メイン部分 --
------------------------------------------------------------
mail_table = {
smtp_address = "smtp.xxxx.co.jp", -- 適宜変更
from = "
[email protected]", -- 適宜変更
to = "
[email protected]", -- 適宜変更
subject = "ルーターが再起動しました"
-- 情報収集
mail_table.text = exec_command("show status boot all")
mail_table.text = mail_table.text .. exec_command("show log")
-- メール送信
rt.mail(mail_table)
上記の restart.lua というテキストファイルを作成し、RTFS の /lua 配下に保存しておきます。保存方法は
こちら
を参照してください。
[ スクリプトの説明 ]
/lua/restart.lua
"show status boot all" と "show log" の実行結果を管理者にメールで送信するスクリプトです。このスクリプトを起動時に実行させるようにスケジュールの設定をしておけば、ルーターが再起動したことをすぐに知ることができ、解析に必要な情報も一緒に得られます。
ip route default gateway 172.16.10.254
ip route 192.168.1.0/24 gateway tunnel 1
ip lan1 address 192.168.2.1/24
ip lan2 address 172.16.10.1/24
ip lan2 nat descriptor 1
tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac anti-replay-check=off
ipsec ike always-on 1 on
ipsec ike pre-shared-key 1 text PASSWORD
ipsec ike remote address 1 172.16.2.1
tunnel enable 1
ipsec auto refresh on
nat descriptor type 1 masquerade
nat descriptor address outer 1 primary
nat descriptor masquerade static 1 1 192.168.2.1 udp 500
nat descriptor masquerade static 1 2 192.168.2.1 esp
[ config の説明 ]
set GATEWAY=172.16.10.254
set LUA_INIT=@/lua/init.lua
set PWD=/lua/tokyo
スクリプトで使用する環境変数の設定です。
[ Lua スクリプト ]
-- ### init.lua ###
rt.command("clear log")
rt.syslog("info", "[スクリプト開始]")
上記の init.lua というテキストファイルを作成し、RTFS の /lua 配下に保存しておきます。保存方法は
こちら
を参照してください。
-- ### ping.lua ###
adr = os.getenv("GATEWAY")
------------------------------------------------------------
-- n 回 PING を実行し、ロス率を返す関数 --
------------------------------------------------------------
function exec_ping(n)
local ping_cmd
local rtn, str
local loss
ping_cmd = string.format("ping -c %s -w 0.5 %s", n, adr)
rtn, str = rt.command(ping_cmd)
if (not rtn) or (not str) then
-- エラー
return -1
loss = string.match(str, "(%d+)%.%d+%%") -- パケットロス率(NNN.N%)の整数部を抽出
if (not loss) then
loss = -1
loss = tonumber(loss)
return loss
------------------------------------------------------------
-- IPsec パケットを優先するための QoS を設定/解除する関数 --
------------------------------------------------------------
function set_qos(set)
local no = ""
if (not set) then
no = "no "
rt.command(no .. "queue class filter 1 4 ip * * udp 500")
rt.command(no .. "queue class filter 2 4 ip * * esp")
rt.command(no .. "queue lan2 class filter list 1 2")
rt.command(no .. "speed lan2 80m") -- 上り速度を考慮した値で
rt.command(no .. "queue lan2 type priority")
rt.command("save")
------------------------------------------------------------
-- メイン部分 --
------------------------------------------------------------
local rtn, str
cnt = 1
qos = false
show_cmd = "show status qos all"
mail_table = {
smtp_address = "smtp.xxxx.co.jp", -- 適宜変更
from = "[email protected]", -- 適宜変更
to = "[email protected]", -- 適宜変更
subject = "Ping Status",
text = ""
while (1) do
set_qos_flag = false
-- 10分間休止
rt.sleep(600)
text = os.date("%Y年%m月%d日 %H時%M分%S秒: PING 実行結果\r\n")
loss = exec_ping(arg[1])
if (loss < 0) then
text = text .. "PING 実行エラー"
text = text .. string.format("宛先:%s パケットロス率:%d%%", adr, loss)
if (loss >= 10) then
if (not qos) then
set_qos(true)
set_qos_flag = true
qos = true
text = text .. "\r\nQoS を設定しました"
elseif (loss == 0) then
if (qos) then
set_qos(false)
qos = false
text = text .. "\r\nQoS を解除しました"
-- SYSLOG へ記録
rt.syslog("info", text)
text = text .. "\r\n"
-- 6 回分をまとめてメール通知
mail_table.text = mail_table.text .. text .. "\r\n"
if (cnt < 6) then
cnt = cnt + 1
-- QoS の設定がある場合だけ"show status qos"の出力結果をメール本文に追加
-- ただし、QoS設定直後は意味がないので除く
if (qos) and (not set_qos_flag) then
rtn, str = rt.command(show_cmd)
if (rtn) and (str) then
text = string.format("# %s\r\n%s", show_cmd, str)
mail_table.text = mail_table.text .. text
-- メール送信
if (not rt.mail(mail_table)) then
rt.syslog("info", "Failed rt.mail by Lua")
-- メール送信が終わったらリセット
cnt = 1
mail_table.text = ""
上記の ping.lua というテキストファイルを作成し、RTFS の /lua/tokyo 配下に保存しておきます。保存方法は
こちら
を参照してください。
[ スクリプトの説明 ]
/lua/init.lua
LUA_INIT に設定する 初期化用スクリプトです。SYSLOG を初期化します
/lua/tokyo/ping.lua
メインのスクリプトです。スクリプトの内容は次の通りです。無限ループするスクリプトなので、rt.sleep( ) が入っていることに注意してください。
10 分おきに WAN 側ゲートウェイアドレスへ任意の回数 PING を送信する。
PING のパケットロス率が 10 % 以上のとき、IPsec パケットを優先するための QoS を設定する。
PING のパケットロス率が 1 % 未満のとき、QoS の設定を解除する。
毎回の PING の実行結果を SYSLOG に記録する。
一定回数分の PING の実行結果をまとめて管理者へメールで送信する。
メール送信時に QoS の設定があったときは、"show status qos all" の出力結果をメール本文に追加する。