linux 服务器 告警声,服务器登录报警脚本

## 服务器登录报警脚本的编写

>[success]要实现的功能,就是当有用户登录服务器时,会自动向指定邮箱发送信息

### 服务器登录报警设置

~~~

#================服务器登录报警脚本============

#!/bin/bash

#登录报警

mkdir /root/tmp &>/dev/null

echo "===================登录用户=======================">>/root/tmp/1.txt

echo "$(whoami)">>/root/tmp/1.txt

echo "===================当前在线用户===================">>/root/tmp/1.txt

echo "$(who)">>/root/tmp/1.txt

echo "===================登录时间=======================">>/root/tmp/1.txt

echo "$(date)">>/root/tmp/1.txt

echo "====================登录IP========================">>/root/tmp/1.txt

echo $(w|sed -n '3p'|awk '{print$3}')>>/root/tmp/1.txt

IP=$(ifconfig eth1 | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}')

mail -s "$(date)[IP:$IP]服务器登录报警"yfketang@163.com

rm -f /root/tmp/1.txt

~~~

当用户登录时执行,需要把该脚本放入 /etc/bashrc中,这样当有用户登录服务器时,就会自动发送邮件

可以同时发送到139邮箱一份,因为139邮箱可以设置免费短信提醒功能。

>[danger]在这里要注意,登录报警脚本的位置,这个非常重要!这个脚本的位置一定不要放在/root目录下,否则的话非root用户登录时,就没有权限执行该脚本。最好把该本设置为755权限。

脚本写好后,加入定时任务,执行了,但是获取不到ip地址,ifconfig 和 iptables 没有正常执行:提示如下错误:

~~~

/var/www/data/autosendmail.sh: line 13: ifconfig: command not found

/var/www/data/autosendmail.sh: line 14: iptables: command not found

/var/www/data/autosendmail.sh: line 15: iptables: command not found

~~~

因为没有使用绝对路径,改成/sbin/ifconfig后就好了。(但脚本的通用性就可能出现问题了 —_—! )

应该是定时任务时没有环境变量所至。

### 扩展内容

#### 磁盘监控报警脚本

>[success]定时判断磁盘可用空间大小,当它小于指定阀值时,向管理者邮箱发送报警邮件。

### 本脚本的关健点

#### 1. 获取磁盘可以用空间大小

>[info]通过df -P命令,获取到磁盘情况,然后使用sed,awk,grep等取出所需要的数据。

执行df -P -h命令后,运行结果如下:要判读是根目录的可用空间的百分比,即红框内的值

![](https://box.kancloud.cn/c3008da3adf60772dc0c75f6634d8c38_785x141.png)

取出48%的方式如下:

~~~

# 这样就可以获取到剩余空间的百分比,取值的方式,不至下面这一种方法

[root@localhost ~]# df -P -h |sed -n '/\/dev\/sda1/p'|awk '{print $5}'|awk -F "%" '{print $1}'

~~~

#### 2. 判断是否符合报警条件

在这里会用到if-then语句

命令格式:

~~~

if command

then

commands

fi

~~~

>[danger]if-then语句是不能测试命令退出状态码之外条件的,所以linux中的if-then语句不能直接判断数值比较等。但是linux中提供了tset命令,可以使用它来测试不同条件的用途。

命令格式如下:

~~~

if test condition

then

commands

fi

~~~

bash shell中还提供了另一种条件测试方法,无需在if-then语句中声明test命令。

~~~

if [ condition ] # 中括号内,条件语句的两边要留一个空格

then

commands

fi

~~~

#### 脚本编写

>当根目录可用空间不足50%时,给出警告

~~~

#! /bin/bash

free=$(df -P -h |sed -n '/\/dev\/sda1/p'|awk '{print $5}'|awk -F "%" '{print $1}')

if [ $free -lt 50 ]

then

echo "可用空间为:$free%"| mailx -s "磁盘已满" 576617109@qq.com >/dev/null

fi

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值