それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。
") }) jQuery.noConflict()(document).ready(function(){ /**ページャーが気に入らないので修正**/ //やるべきこと // pre・next のいれかえ jQuery('span.pager-next').insertAfter('span.pager-prev') // pre/next に矢印を入れる jQuery('a[rel=next]').text(jQuery('a[rel=next]').text()+"> ") jQuery('a[rel=prev]').text("< "+jQuery('a[rel=prev]').text()) // pre/next をヘッダにもってくる //jQuery(".date.first").css("display","inline-block") jQuery('div.permalink.pager').clone().insertAfter(".date.first") jQuery("header .pager a").css("padding","0px 15px"); //pre/next をAjaxで取得してタイトルを取る。 //取得したタイトルをpre/next のタイトルに jQuery('span.pager-next,span.pager-prev').css("display","inline-block") jQuery('span.pager-next,span.pager-prev').css("width","250px"); jQuery('span.pager-next,span.pager-prev').css("overflow", "hidden"); jQuery('span.pager-next,span.pager-prev').css("white-space", "nowrap"); jQuery('span.pager-next,span.pager-prev').css("text-overflow", "ellipsis"); jQuery("a[rel=next],a[rel=prev]").each(function(idx,e){ var anchor = e jQuery.get(anchor.href,null,function(html){ jQuery(anchor).text() var title = jQuery("
").html(html).find(".entry-title").text().trim() jQuery(anchor).attr("title", title); text = jQuery(anchor).text() text = text.slice(0,10); text = text.replace(/の記事/, "の記事 ["+title+"] "); jQuery(anchor).text(text) }) }); }); })

処理が終わったらメールで通知したい。

お題のとおりです。処理が終わったら、Growlやメールで通知したい。

ちょっと時間のかかる処理をやっていて、終わったら、メールで通知してほしい。ddとかね。

通知するアイディア

パっと、思いつくのはこんな感じで使うこと。でもこれじゃダメなんだ。

$ ./command | gmail
$ ./command | growl
$ gmail_notify ./commmand
$ growl_notify ./command

こういう例はすぐ思いつくサンプルも多いし。でもさー

起動し忘れたら終わり。

この書き方だと起動し忘れた時に大変。他にも思った以上に時間がかかったよ!みたいなときに対応できない。

プロセス監視っぽくやります。

process番号を監視して、プロセスが消えたらメールを送るようにしてみた。

こんな感じで使いたい。

$ ./gmail_notify PID:プロセスID


これだと、あとからプロセスIDを元に通知を作れるから、幅広く使えそう。

growlどうすんの!?

Growlは・・・Gmailを監視してればいいんです!

gmailにメール来る→Growl通知される

メールを送るとiPhoneなどデバイスでも通知されるので、絶対メールのほうが便利。

メール通知設定しておけば、連鎖で簡単。これで終了ですね。

プロセス番号を監視する。

#!/usr/bin/env ruby
#処理が終わったら、メールで通知したい。
# http://d.hatena.ne.jp/takuya_1st/
require 'rubygems'
require 'net/smtp'
require 'base64'
require 'tmail'
require 'tlsmail'

def send_gmail( body= nil )
mail = TMail::Mail.new

mail.to = "[email protected]"
mail.from = "[email protected]"
mail.subject = "処理終了"
mail.date = Time.now
mail.mime_version = "1.0"
mail.set_content_type "text", "plain", {"charset" => "iso-2202-jp"}

t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
mail.body = "処理終了 (#{t})" unless body

Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
Net::SMTP.start( "smtp.gmail.com", 587, "local","[email protected]”,”***PASS***","plain" ){|smtp|
    smtp.sendmail( mail.encoded,mail.from,mail.to )
}
end

def still_alive?( proccess_id )
     `ps #{proccess_id}`.split(/\n/).size >1
end


def watch( process_id)
          while( still_alive? process_id) do
                    sleep 60
          end
end


puts "Usage : #{__FILE__} PROCESS_ID " if ARGV.size < 0
exit if ARGV.size <  0

watch( ARGV.shift)
send_gmail()

これはほんとうに正しいのかわからない。
Linuxシステムコールのプロセス監視・管理あたりで正しくやりたいけど。とりあえず、さくっと動くからよしとする。