vRX 基本ライセンスの有効期間を自動でメール通知

管理番号:YMHRT-25891 
(最終更新日: 2023/9/29)

本設定例の対応機種は、vRXです。

構成図

vRX 基本ライセンスの更新忘れを未然に防止するための設定例です。
本設定例では、vRX 基本ライセンスの有効期限が切れる前に、メールで通知する Luaスクリプトのサンプルをご紹介します。運用中の vRX に追加する形でご利用ください。

サンプルのLuaスクリプトを実行すると、以下のように動作します。
  (1) 現在時刻を取得
  (2) show status license vrx all コマンドで表示される有効期間を取得
  (3) (1) と (2) の差が指定した日数以下の場合、メールで通知
  (4) 毎月 1日に有効期限の残日数をメールで通知

対応機種のうち、設定例を掲載している機種は、以下のとおりです。

機種 掲載内容 備考
vRX Luaスクリプト実行手順
Luaスクリプト例
Luaスクリプト機能

仮想ルーターvRX

Luaスクリプト実行手順

Luaスクリプトを導入する一連の流れを、サンプルのLuaスクリプトを使用して説明します。
また、Windows PC を使用することを前提とします。

1.Luaスクリプトをホームページから PC にダウンロードする

1-1.Luaスクリプトをホームページから PC にダウンロードします。
サンプルのLuaスクリプト

1-2.環境に合わせて、Luaスクリプトの設定値を変更して保存します。

[解説]
メモ帳などのテキストエディターで Luaスクリプトを開き、★印がついている設定値をご利用の環境に合わせて変更してください。

2.vRX の準備をする

2-1.Luaスクリプトを保存するディレクトリーを作成します。

[vRXコンソール]
# make directory /lua_work
#
[解説]
コマンドの詳細は、ディレクトリの作成をご参照ください。

2-2.SFTP を利用するために、vRX の準備をします。

[vRXコンソール]
# sftpd host any
# 
# login user yamaha
Old_Password:
New_Password:
New_Password:
Password Strength : strong
# 
# administrator password
Old_Password:
New_Password:
New_Password:
Password Strength : strong
#
[解説]
コマンドの詳細は、以下をご参照ください。
SFTP サーバーへアクセスできるホストの設定
ログインパスワードの設定
管理パスワードの設定

3.Luaスクリプトを PC から vRX に転送する

3-1.コマンドプロンプトを起動し、1-2 で Luaスクリプトファイルを保存したディレクトリーに移動します。

3-2.SFTP で、Luaスクリプトを vRX に転送します。

[コマンドプロンプト]
> sftp yamaha@(vRX の IPアドレス)
Connecting to (vRX の IPアドレス)...
Password:(管理パスワード)
sftp> put notice_vrx_license_expiration.lua /lua_work
Uploading notice_vrx_license_expiration.lua to /lua_work/notice_vrx_license_expiration.lua
notice_vrx_license_expiration.lua			100% 5528     1.5MB/s   00:00
sftp>
[解説]
2-2 で設定した、ユーザー名:yamaha、管理パスワードを利用します。
SFTPの詳細は、SFTPサーバー機能をご参照ください。

4.Luaスクリプトを実行するスケジュールを設定する

4-1.Luaスクリプトの転送を確認します。

[vRXコンソール]
# show file list /lua_work
yyyy/mm/dd hh:mm:ss            5528 notice_vrx_license_expiration.lua
#
[解説]
コマンドの詳細は、ファイル情報の一覧の表示をご参照ください。

4-2.Luaスクリプトを実行するスケジュールを設定します。
   ※本設定例では、vRX の起動時に実行されるように設定します。
    運用中の vRX を再起動せずに Luaスクリプトを手動で実行したい場合は、補足説明をご覧ください。

[vRXコンソール]
# schedule at 1 startup * lua /lua_work/notice_vrx_license_expiration.lua
#
[解説]
コマンドの詳細は、スケジュールの設定をご参照ください。

[補足説明]
以下のコマンドで、Luaスクリプトを手動で実行できます。
 # lua /lua_work/notice_vrx_license_expiration.lua
 コマンドの詳細は、Luaスクリプトの実行をご参照ください。

Luaスクリプトの走行確認

「show status lua」コマンドで、Luaスクリプトの走行状態を確認できます。

[vRXコンソール]
# show status lua running
[running]
LuaタスクID (状態):  1  (RUN)
走行トリガー:        スケジュールによる実行
コマンドライン:      lua notice_vrx_license_expiration.lua
スクリプトファイル:  /lua_work/notice_vrx_license_expiration.lua
開始日時:            yyyy/mm/dd hh:mm:ss
経過時間:            40秒
[解説]
コマンドの詳細は、Lua スクリプトの走行状態の表示 をご覧ください。

Luaスクリプト例

設定値

-- 送信メールの設定
local mail_table = {
 smtp_address = "(SMTPサーバーのアドレス)",
 smtps = true,
 smtp_port = "587",
 smtp_auth_protocol = "plain",
 smtp_auth_name = "(SMTP認証用ユーザー名)",
 smtp_auth_password = "(SMTP認証用パスワード)",
 from = "(送信元メールアドレス)",
 to = "(宛先メールアドレス)",
 subject = "vRX ライセンス有効期間のお知らせ"
}

-- 有効期限の何日前からメールを送信するかの設定 (日)
local before_days = (1 - 365)

-- 基本ライセンスの有効期限の確認およびメール通知の間隔設定 (日)
local check_interval_days = (1 - 10)

変数定義

-- 有効期限を確認するコマンド
local command = "show status license vrx all"
-- 有効期限文字列
local pattern = "(%d%d%d%d)/(%d%d)/(%d%d)%s+%-%s+(%d%d%d%d)/(%d%d)/(%d%d)"
local year1, month1, day1, year2, month2, day2

メインルーチン

if check_interval_days < 1 or check_interval_days > 10 then
 print("check_interval_days は 1 から 10 の範囲内で指定してください。")
 os.exit(1)
end

if before_days < 1 or before_days > 365 then
 print("before_days は 1 から 365 の範囲内で指定してください。")
 os.exit(1)
end

if before_days < check_interval_days then
 print("check_interval_days は before_days より小さい数値で指定してください。")
 os.exit(1)
end

-- 初回フラグ
local first_time = true

-- 起動直後 30 秒待機
rt.sleep(30)

while true do
 -- 現在時刻の取得
 local current_date = os.date("*t")
 local current_time = os.time(current_date)
 local end_time

 -- 0時0分0秒の日付情報を設定
 current_date.hour = 0
 current_date.min = 0
 current_date.sec = 0
 current_date = os.time(current_date)

 -- 有効期限を取得するためコマンド実行
 rtn, str = rt.command(command)

 -- 有効期限を抽出する
 for y1, m1, d1, y2, m2, d2 in str:gmatch(pattern) do
  year1, month1, day1, year2, month2, day2 = y1, m1, d1, y2, m2, d2
 end

 if year1 and month1 and day1 and year2 and month2 and day2 then
  local expiration_date = os.time({year = tonumber(year2), month = tonumber(month2), day = tonumber(day2), hour = 0, min = 0, sec = 0})
  local notice_days = 60 * 60 * 24 * before_days

  if expiration_date - current_date <= notice_days and expiration_date - current_date >= 0 then
   -- 有効期限が before_days 日前の場合
   local days_left = (expiration_date - current_date) / (60 * 60 * 24)
   -- メール本文を作成
   mail_table.text = string.format("残り %d 日で vRX ライセンスの有効期間が切れます。ライセンス更新手続きをしてください。\r\n\r\n%s", days_left, str)
   -- メール送信
   rt.mail(mail_table)
  elseif expiration_date - current_date < 0 then
   -- 有効期限が切れた場合
   -- メール本文を作成
   mail_table.text = string.format("vRX ライセンスの有効期限が切れました。ライセンス更新手続きをしてください。\r\n\r\n%s", str)
   -- メール送信
   rt.mail(mail_table)
  elseif os.date("%d", current_date) == "01" then
   -- 毎月1日のメール通知
   local days_left = (expiration_date - current_date) / (60 * 60 * 24)
   -- メール本文を作成
   mail_table.text = string.format("残り %d 日で vRX ライセンスの有効期間が切れます。\r\n\r\n%s", days_left, str)
   -- メール送信
   rt.mail(mail_table)
  elseif first_time then
   -- メール設定の確認のため初回にメール通知
   local days_left = (expiration_date - current_date) / (60 * 60 * 24)
   -- メール本文を作成
   mail_table.text = string.format("残り %d 日で vRX ライセンスの有効期間が切れます。\r\n\r\n%s", days_left, str)
   -- メール送信
   rt.mail(mail_table)
  end
 end

 first_time = false

 -- 時刻補正を行うための時刻取得
  end_time = os.time(os.date("*t"))

 -- check_interval_days 日待つ
 rt.sleep(60 * 60 * 24 * check_interval_days - (end_time - current_time))
end

【ご注意】
本設定例は、設定の参考例を示したもので、動作を保証するものではございません。
ご利用いただく際には、十分に評価・検証を実施してください。

メール

ご相談・お問い合わせ