版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1 if
单分支结构
细节
if [ -f "$file" ];then
#####等价形式#####
if [ -f "$file" ]
then
2 双分支结构
3 多分支结构
注意:是elif而不是elseif,记住四个字母即可,并且后面也要跟then!
练习1:等价变换
#!/bin/bash
# [ -f /etc/hosts ] && echo 1
if [ -f /etc/hosts ];then
echo 1
fi
# 核心:思路的转换!
练习2:监控内存
#!/bin/bash
# 需求:开发shell脚本判断系统剩余内存的大小,如果低于100M就邮件报警给管理员,并加入系统定时任务每三分钟执行一次检查
#(1)获取可用内存的大小--->核心
avaible_free=`free -m|awk 'NR==2{print $NF}'`
#(2)阈值判断
if [ $avaible_free -lt 100 ]
then
echo "当前内存太小,不够使用,正在发送" && mail -s "title" [email protected] #后续自己搭建邮件服务器!
fi
#(3)把上述脚本加入crond定时任务,每分钟检查一次,达到阈值报警
# */3 * * * * /mnt/file.sh > /dev/null
# 重点是思路!
扩展:监控磁盘剩余空间、NFS系统、mysql、web等
# 监控磁盘空间
df -h | awk 'NR==2{print $4}'
######################
#监控服务是不是进行-->不需要awk取出来!
netstat -antlupe |grep 3306|wc -l
#端口是不是存在或者socket是不是存在
#mysqld是不是开启-->两个
netstat -antlupe |grep mysqld |wc -l
# web是80
特别强调:read读入和命令行传参是两种不同的方法!
需求1
用if双分支实现对nginx或mysql服务是否正常进行判断,使用进程数、端口、url的方式判断,如果进程没起,把进程启动。
web服务和数据库(mysql)的监控方法
需求:监控web服务和mysql的方式
1、端口监控
本地监控:netstat、ss、lsof
远程监控:telnet(一般不用)、nmap、nc
telnet监控端口
[root@lamp ~]# echo -e "\n"|telnet www.baidu.com 80|grep Connected|wc -l
Connection closed by foreign host.
1
nmap监控端口
[root@lamp ~]# nmap www.baidu.com -p 80|grep open|wc -l
1
nc监控端口
[root@lamp ~]# nc -z 192.168.163.128 22|grep succeeded|wc -l
1
2、进程监控
本地监控:ps -ef|grep mysql|wc -l
3、wget/curl,http方式根据返回值或者返回内容判断
4、header(http),http方式根据状态码判断
5、数据库特有通过mysql客户端连接,根据返回值或者返回内容判断
注意:正常是几,如果不是几就要关注了!
[root@lamp ~]# cat check_db.sh
#!/bin/bash
#本地的方式-->mysql不启动,是0(数字),用 -eq会有语法报错!--->尽量取行判断,不要取数值
# 多分割符号
if [ "`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`" = "3306" ]
#过滤进程(注意:脚本名称不能是mysql,自己也算一个进程,容器出错)
#if [ `ps -ef|grep mysql|grep -v grep|wc -l` -gt 0 ]
#if [ `netstat -lntup|grep mysqld|wc -l` -gt 0 ]
#if [ `lsof -i tcp:3306|wc -l` -gt 0 ]
#远程的方式-->换成自己的ip的形式!
#if [ `nmap 172.25.2.1 -p 3306 2>/dev/null|grep open|wc -l` -gt 0 ]
#if [ `nc -w 2 172.25.2.1 3306 &>/dev/null&&echo ok|grep ok|wc -l` -gt 0 ]
then
echo "Mysql is Running."
else
echo "Mysql is Stopped."
# 脚本开启-->多示例
/deta/mysql start
fi