#!/usr/bin/env ruby require 'dbm' # dbmクラスを利用 datafile = "./database" # データベースファイル名 lockfile = datafile+".lck" # ロックファイル名 data = Hash.new while csv=gets # 先にCSVデータを読んでハッシュに代入 if /([^,]*),(.*)/ =~ csv data[$1] = $2 end end open(lockfile, "w") do |lf| lf.flock(File::LOCK_EX) DBM.open(datafile) do |x| STDERR.puts "#{datafile} update starts." for key, val in data x[key] = val end sleep 2 # 本当は一瞬で終わるが少し時間を掛ける STDERR.puts "#{datafile} update ends." end lf.flock(File::LOCK_UN) end