CPU温度でPCをシャットダウン
http://alfalfa.livedoor.biz/archives/51510441.htmlをみて怖くなってきたのでチョロッと作成した。
#!/usr/bin/env ruby # -*- encoding: UTF-8 -*- class String def grep(reg) ret = [] self.each_line do |line| ret << line if reg =~ line end ret end end class Sensors #文字列を温度に変換する def to_temperature(str) str.scan(/\d*\.\d*/)[0].to_f end private :to_temperature def get #現状Core系のみ対応 `sensors`.grep(/Core/).map{|s|s.split(" ")}.map do |cpu| ret = {} ret[cpu[0]] = cpu[1].to_i ret["temperature"] = to_temperature(cpu[2]) ret[cpu[3].delete("(")] = to_temperature(cpu[5]) ret[cpu[6]] = to_temperature(cpu[8]) cpu = ret end end def core get.size end #温度取得 def temperature(cpu) get[cpu]["temperature"] end #high def high(cpu) get[cpu]["high"] end #crit def crit(cpu) get[cpu]["crit"] end end def log(tem) File.open("/var/log/rsenwatch", "a") do |f| f.write "#{Time.now} shoutdown:cpu temperature is #{tem}" end end s = Sensors.new s.core.times do |i| if s.high(i) <= s.temperature(i) log(s.temperature(i)) system("/sbin/shutdown -h now") end end
自分の環境がマルチコアなので、シングルコアだと動かないはず。
あとはcronで適当に動かせば良い。
問題は留守以外でも落ちるのが問題。