shell脚本批量监控Linux server配置文件的更改

简介:

    某些情况下,自己或同事修改了某处系统设置,但由此所引发的问题可能一段时间以后才会暴露,由于记不清之前改过哪些文件、改了哪些内容,解决问题时可能走弯路。于是写了一个小脚本以特定频率来监控常见系统配置文件,如发生变化,则邮件通知管理员。

    这里小发散一下,笔者习惯在内网单独弄一台server,给予其免秘钥登录所有服务器额权限,以便批量管理server。并且统计好一个文本文件,以”web1-x.x.x.x“每行一条记录的形式将所有server主机名和IP信息搜集于此。以备各种批量任务脚本引用。

    注:这台内网管理server权限巨大,所以即便在内网,其密码复杂度、防火墙等安全措施也不容忽视。

下面是我当前监控的配置文件,记录于server_conf.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
/var/spool/cron/root
/etc/fstab
/etc/sysconfig/network-scripts/ifcfg-em1
/etc/sysconfig/network-scripts/ifcfg-em2
/etc/sysconfig/network
/etc/hosts
/etc/resolv .conf
/etc/sudoers
/etc/selinux/config
/etc/sysconfig/iptables
/etc/ssh/sshd_config
/root/ . ssh /authorized_keys

下面看脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh
 
for  ip_server  in  $( cat  /shells/ips .txt)   #记录局域网的所有主机ip和主机名
   do
   (
   ip=$( echo  $ip_server| awk  -F  '-'  '{print $2}' )    #获取各server IP
  #rsync -a -e  /shells/server_conf.txt $ip:/shells/    ###初次执行以及被监控的文件列表有修改时才需同步
 
   ssh  $ip '
           tmp_dir= /var/log/check_conf ;     ###创建用于存放‘上一次的’配置文件的目录
 
           if  [ ! -d  "$tmp_dir"  ];
           then
               mkdir  $tmp_dir;
           fi ;
 
           for  conf_file  in  $( cat  /shells/server_conf .txt);      ###获取各配置文件绝对路径
           do
               conf_name= "${conf_file##*/}"     ###获取文件名,不含目录.这个写法不太常用,某些 awk 无法使用的情况可以用它
 
               ###diff判断内容是否改变,并调整输出格式
               diff  $conf_file  $tmp_dir/$conf_name.last >  /dev/null ;
               if  [ $? != 0 ];
               then
                   echo  -e  "diff $conf_file  $conf_name.last\n-------------------------" ;
                   diff  $conf_file  $tmp_dir/$conf_name.last;
               fi ;
               ###将现在的配置文件同步到$tmp_dir以备下一次对比
               rsync  -a $conf_file $tmp_dir/$conf_name.last >  /dev/null ;
           done ;' &>  /tmp/ $ip.tmp
 
   if  [ $( cat  /tmp/ $ip.tmp| wc  -l) -gt 1 ]; then
     mailx -s  "$ip_server conf_file modified"  monitor@xxxx.com <  /tmp/ $ip.tmp
   fi
   )&     ###以子shell形式达到for循环并行的效果
done
wait

效果截图

wKiom1YiaRyAOxMSAACth92v3Vo838.jpg

wKiom1Yia6LQf8YfAACVk0G5C6o412.jpg






     本文转自kai404 51CTO博客,原文链接:http://blog.51cto.com/kaifly/1703701,如需转载请自行联系原作者

相关文章
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
22天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
1月前
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
44 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
25 0
|
关系型数据库 MySQL Shell
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
20天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
45 2
6种方法打造出色的Shell脚本
|
7天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
21 1