Linux之Shell脚本自动化编程十(shell脚本编程实战以及收尾中)

版权声明: https://blog.csdn.net/qq_41740705/article/details/82111023

 

首先了解一点关于密码的设置。

 

 

Linux实现自动监测服务并发送邮件报警的脚本

有的服务器在运行某些服务的时候可能会出现一些问题,可能会引起很严重的后果,比如用户数据丢失,所以监测服务是很有必要的,但是我们总不能一直人为地去检查那么多台服务器吧。我们有一些软件比如zabbix可以实现监控,不过我们现在学的是脚本,那么下面我们就来看一看如何用脚本自动监测服务并且发邮件报警。下面我们就以监测firewalld和iptables为例。首先如何查看服务的运行状态呢?

 

为什么iptables没有呢?因为我们少装了一个iptables-services,上一讲用的是192.168.214.129,这个主机装过了,这一讲用的是192.168.214.128。装完了以后就可以看了。

 

那么我们如何把状态提取出来呢?

 

然后的问题就是如何发邮件报警,发邮件用mail就可以了,如果mail说是not found,那么清先安装mailx(yum -y install mailx)。我们试着给我的qq邮箱发一封邮件。

 

好像没有收到啊???

 

这是因为由于我们没有修改主机名称我们的主机名是默认的localhost.localdomian。

 

这样的邮件被认为是垃圾邮件,在垃圾箱里面。

 

你可以点击移回收件箱,不过下一封还是会在垃圾箱里面,也可以选择修改一下主机名。

 

然后就不会被识别为垃圾邮件。

 

那么下面就可以来写这个脚本了。

 

然后运行一下,右下角就收到了一封邮件。

 

确实是收到了。

 

然后我们停用掉firewalld,再运行一次脚本来做测试。又收到了。

 

因为这两个都没有启用,所以是两封。

 

这是收到邮件后我们人为去查看这台服务器的毛病。当然这里还没有结束,还要和crontab结合起来,如果服务没有那么重要,我们可以每小时执行一次,如果这项服务很重要,我们就每分钟执行一次,因为每分钟crond才去检查一次有没有任务需要执行,并且格式* * * * *,最小的时间间隔也就是一分钟了。

关于上一讲远程批量部署的一些补充

因为是自动化批量部署,我们不希望有交互,因为有交互的话就得有人在服务器那里看着,那么远程ssh就有一个问题,那就是输入密码是一个交互的行为,我们如何才能避免这种交互呢?输入重定向?

 

很遗憾是不行的。那么就需要用到下面的免密登陆。参考了https://jingyan.baidu.com/album/c275f6ba08267ae33c756758.html?picindex=4

步骤如下:

 

 

 

 

 

我们来实际演练一下。

 

 

看到确实是不需要输密码了。

Linux系统硬件信息收集脚本

有的时候我们需要看到这样的信息,一般需要的系统信息有ip,主机名,cpu,内存,磁盘等信息。那么我们就先来看如何获取这些信息。

ip就不说了,主机名其实很简单,cpu可以查看/proc/cpuinfo,内存可以用free -m,磁盘可以用fdisk -l。

 

 

 

 

这里面我们要提取cpu的model name,处理器的核心数和主频。首先我们的处理器是4个但是其实我们设置的时候是两个处理器,每个处理器内核有2个,所以其实算的还是内核的数量是4,不过我们似乎习惯了直接称为处理器数是4。应该是每一个内核同时可以运行一个进程。怎么看出来是两个处理器呢?上面有一个physical id,只有0和1,那么就是两个处理器,每一个处理器都是两核,所以processor有0,1,2,3,每一个physical id有两个processor,这两个processor的core id不一样,分别是0和1,cpu cores是每一个cpu的核心数,看到都是2,cpu的主频在cpu MHz。

 

提取这些信息没有什么难的。load的三个数值以前也说过,好像是最近5分钟,10分钟,15分钟的cpu占用率。

 

对于内存,我们先不考虑交换分区,就先统计总共的内存,也就是Mem:total。至于磁盘我们用fdisk -l来看。我们只取这个/dev/sda:21.5GB这个信息。

 

那么其实提取信息这个还是比较好搞定的,如何批量提取也简单,我们搞一台服务器作为控制机,在这台控制机上在脚本里用ssh挨个把服务器列表里面的信息统计即可。这些其实都不是问题,问题是现在我想把数据导入excel里面,怎么做呢?我们可以先把数据写成csv的格式。

 

csv是以逗号分隔列的,写成csv格式以后我们用excel打开就会转成excel格式,就会得到我们想要的结果了。我下面就演示一下。

 

然后运行一下这个脚本,看一看1.csv文件。

 

有几个点提示一下。

 

这里还要纠正sed s///后面加g的作用,这个g不是从保持空间的内容复制到模式空间的意思,而是全局的意思,看下图即可,如果不加最后的g,只替换了一次。

 

那么现在1.csv有了,我们怎么看excel能不能看呢?有一种方法是把1.csv作为邮件附件发送。

 

-a选项后面就是附件。

 

不过不知道为什么,这封邮件又被放在垃圾箱里面了。

 

我们看一看这个1.csv。下载完了用excel打开的效果:

 

如果用记事本打开,就是这种效果:

 

为什么负载的数据跳了一列?这是因为24.5GB后面多了一个,我们去修改一下info.sh。最简单的办法是去掉一个逗号。

 

运行一次info.sh,然后再发一次邮件。

 

看到就对上了。这里说一下小细节,逗号一定要用英文的逗号。

 

还有一种方法是用sz,参考了https://blog.csdn.net/u014242496/article/details/52540637

 

SecureCRT也是一种和Xshell,putty类似的软件。

 

 

 

可以设置默认路径。

 

 

再传一次试试。

 

就没有选择文件夹的那一步了。那么我们再来看一下rz。

 

Linux实现磁盘监控报警脚本

这个功能还是有软件可以实现。

 

不过我们还是练习写脚本试一试。我们下面来用脚本实现磁盘占用(其实准确地说应该是文件分区占用)达到一定百分比的时候报发邮件报警的这么一个脚本。首先如何查看分区占用呢?用df -h。

然后我们就可以写脚本了。我们在脚本中要设置一个cv,也就是critical value(临界值),当分区利用率超过cv时,就发邮件报警,一般是85%左右,不过这里为了能够报警,我设置了一个10%。

 

运行一下脚本。就收到邮件了。

 

邮件内容也都是没问题的。那么我先来说一下这个脚本需要注意的几个点,第一个是我们这里逐行读取文件是用了while,以前用的是for,这里算是一个复习,第二个是我们这个脚本还是复习了cat <<-EOF这种输入的方式,-在这里是不可少的,当然如果你把EOF顶头了,那么可以不要-。这个脚本也不是多难,看着df -h分析一下就可以了。最后再结合crontab。

猜你喜欢

转载自blog.csdn.net/qq_41740705/article/details/82111023