实验环境: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 就可以发到我的邮箱了。
整个过程一个脚本完成。