很久前写了这些东西,不过想攒着有些新的什么利用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的聊天提醒,不过我不太想被太多的提醒打断。