数十分かかる処理の終了をレコードのフラグ値で検知しなければならない場面がありました。
当初はタイマーをかけて、5分毎に手動でselectを発行して目視確認してましたが、面倒なので自動化しました。
必要なもの
- Ruby
- oci8 (gem)
スクリプト
check_upload_flg.rb
# coding : sjis
require 'oci8'
user = 'user'
pass = 'pass'
tns = 'tns'
sql =<<SQL
select UPLOAD_FLG
from UPLOAD_MNG
where id = 3
SQL
begin
conn = OCI8.new(user, pass, tns)
finished = false
loop do
conn.exec(sql){|row| finished = (row.first == 1) }
if finished
`msg gomao9 /time:3600 アップロード終了`
break
end
sleep(30)
end
ensure
conn.logoff if conn
end
conn.exec(sql)~
のあたりはもっと綺麗に書けそうですが、hackなので動けばよし。
msg
は、ダイアログで通知を行うコマンド。初めて知りました。
他のマシンや自分以外のユーザに送る場合には、別途設定やオプション指定が必要みたいですが、自分へのリマインド目的ならmsg ユーザ名 メッセージ
で十分。
※追記
msg
コマンドに /time:時間
オプションを指定すると、ダイアログが自動で消去されるまでの時間を設定できます。デフォルトは60(秒)。