很久前写了这些东西,不过想攒着有些新的什么利用inotify的点子一并写出来。等了7个月,没有什么新的东西,想想还是先写了吧,否则马上就是2014了。

原理很简单,incrontab里写一行,检测某个log文件的改变,然后作出相应的反馈。我用这个检测我邮件发送成功与否。

我发邮件用msmtp,会产生~/.msmtp.log日志文件,于是要监测的文件也就是这个。incrontab里这样写

/home/roylez/.msmtp.log IN_MODIFY /home/roylez/bin/log_watch_msmtp.rb /home/roylez/.msmtp.log

也就是一旦文件改变,执行log_watch_msmtp.rb ...。这个log watch的脚本的内容如下

#!/usr/bin/env ruby
# vim:fdm=marker
#Description: 检查最新的发送邮件结果

load '/home/roylez/bin/msg'

log = ARGV.first

string = `tail -n 1 #{log} |tac`

pat1 = /recipients=([^ ]*) .*? exitcode=(.*?)$/

extracts = []
status = nil
to = nil

string.each_line do |l|
  if l.strip =~ pat1
    status = $2
    to = $1
  end
end

msg :dbus => true, :title => "邮件: ", :text => "\n收件人: #{to}\n\n发送#{(status =~ /ex_ok/i) ? "成功" : "失败"}"

大概的意思是在桌面上蹦出来一个提醒,告诉我邮件发送到底成功没有。至于这个msg脚本,可以在这里找到。

显然这个东西可以用来做irc的聊天提醒,不过我不太想被太多的提醒打断。