程序自动收集12台服务器的当天的messages,然后发往邮箱

  实验环境:LINUX AS4

  实验目的:减少重复性工作。每天都需要查看服务器的messages日志。每台机器都要su - root;输入密码;

  cd /var/log; tail -300 messages ;然后退出,然后再重复12次,感觉比较繁琐。今天编写了一个程序,利用ssh

  自动搜集12台服务器当天的messages,然后合并发往我的工作邮箱,感觉方便了很多。

  用到的知识点:1:ssh 免验证,通过一台机器调用其他机器的程序。

  2:sudo,由于messages中日志的格式是:

  Apr  3 00:00:00 emaila1 sshd(pam_unix)[22744]: session opened for user root by (uid=0)我需要grep当天的日志,就必须找到“Apr  3”字符串。发现可以从date的结果里面截取。想了好久。Apr 和3之间有两个空格,如果后面是两位数的日期,是一个空格,也就是这个字符串长度为6.

  mon="`date`";
  para="${mon:4:6}";
  echo "$para";。

  使用awk,和date加参数都没有能达到效果,后来使用了截取字符串的方法。

  3:root的字符集是LANG=zh_CN.gbk输出日志的内容:四  4月  3 22:43:53 CST 2008

  不合要求,又最好不改变root的实质,这就需要在我的用户里面修改LANG=en_US.UTF-8。

  4:使用我的用户怎么执行root权限呢,就需要sudo ,要配置visudo,设置免密码方式。

  5:内容scp汇合到一台机器,然后合并成一个文件。

  6:sudo echo "Messages `date +%b_%d`" |sudo mutt -s "Messages `date +%b_%d`"    yang**@midea.com.cn -a messages.log 就可以发到我的邮箱了。

  整个过程一个脚本完成。