shell实战_检查服务状态经典案例
应用实例检查服务状态
开发mysql监控脚本
类型 | 说明 |
---|---|
端口监控 | 1)在服务器本地监控服务端口的长假命令有netstat,ss,lsof; 2)从远端监控服务器本地端口的命令有telnet,nmap,nc |
监控服务进程货进程数 | 此帆帆适合本地服务器,注意,过滤的是进程的名字。 命令为:ps -ef|grep nginx|wc -l ps -ef|grep mysql|wc -l |
在客户端模拟用户访问 | 使用wget 或curl命令进行测试(如果测试shujk-,则需要转为通过Web服务器去访问数据库),并对测试结果做三种判断: 1)利用返回值(echo $?)进行判断 ; 2) 获取特殊字符串以进行判断(需要事先开发好程序); 3)根据HTTP相应header的情况进行判断 |
登录MySQL数据库判断 | 通过MySQL客户端连接数据库,根据返回值或返回内容判断。例如:mysql -uroot -poldboy123 -e "select varsion();" &>/dev/null; echo ? |
- 端口监控
####eg1以下几个命令通过服务器本地命令监控
#####可以更改默认端口3306换成其他,减少被攻击几率
[root@localhost home]# netstat -tunlp|grep 3306
tcp6 0 0 :::33060 :::* LISTEN 6540/mysqld
tcp6 0 0 :::3306 :::* LISTEN 6540/mysqld ####6540进程,mysqld进程名字
[root@localhost home]# ##ss和netstat用法一致
[root@localhost home]# ss -tunlp|grep 3306
tcp LISTEN 0 70 [::]:33060 [::]:* users:(("mysqld",pid=6540,fd=21))
tcp LISTEN 0 128 [::]:3306 [::]:* users:(("mysqld",pid=6540,fd=33))
[root@localhost home]#
[root@localhost home]# lsof -i tcp:3306 ####用lsof指定tcp下的3306的端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 6540 mysql 33u IPv6 167061 0t0 TCP *:mysql (LISTEN)
[root@localhost home]#
######eg2远程命令监控
###nmap命令
[root@localhost home]# nmap 127.0.0.1 -p 3306 ###使用nmap命令查看本地服务器上,-p指定端口
Starting Nmap 6.40 ( http://nmap.org ) at 2023-09-28 15:44 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000077s latency).
PORT STATE SERVICE
3306/tcp open mysql ####3306端口已打开
Nmap done: 1 IP address
########使用telnet命令
[root@localhost home]# echo -e "\n" |telnet 127.0.0.1 3380
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused ####访问一个随意的任意端口,拒绝,说明没打开
[root@localhost home]# echo -e "\n" |telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'. #####只要输出任意内容都表示端口打开
Connection closed by foreign host.
[root@localhost home]#
- 服务器进程监控
[root@localhost home]# ps -ef|grep mysql
mysql 6540 1 0 10:43 ? 00:02:37 /usr/sbin/mysqld
root 26972 6985 0 15:58 pts/1 00:00:00 grep --color=auto mysql
[root@localhost home]# ps -ef|grep mysql|grep -v grep #####-v grep 去掉本身产生的grep进程
mysql 6540 1 0 10:43 ? 00:02:37 /usr/sbin/mysqld
[root@localhost home]#
通过编程语言连接mysql
通过访问应用程序接口,读取数据库,查看是否能拿到数据,从而得知mysql是否运行
php程序
python程序
补充下mysql基础知识
使用root直接登录mysql mysql -h 127.0.0.1 -u root -p创建数据库 ; create database mydb ;
查看数据库 show databases;
创建用户和密码(@符号后可以跟ip地址%表示所有'ip'都可以登录) create user test10@'%' IDENTIFIED BY 'Xujb!519736';
将mydb数据库权限赋予test10: grant all privileges on mydb.* to 'test10'@'%' with grant option;
具体方法略了
shell检测mysql服务状态
ps -ef|grep mysql|grep -v grep|wc -l
[root@localhost tmp]# cat test_mysql.sh
#!/bin/bash
echo "--------服务器端口监控方法1:使用netstat"
if [ `netstat -tunlp|grep mysql|wc -l` -ge 1 ]
then
echo "myql服务器运行正常!"
else
echo "mysql挂了,你个二比"
fi
echo "--------服务器端口监监控方法2:使用ss"
if [ `ss -tunlp|grep mysql|wc -l` -ge 1 ]
then
echo "myql服务器运行正常!"
else
echo "mysql挂了,你个二比"
fi
echo "--------服务器进程监控方法1:ps"
vrm=`ps -ef|grep mysql|grep -v 'grep' |wc -l`
`ps -ef|grep mysql|grep -v grep> ./mylog.log`
if [ ${vrm} -ge 1 ]
then
echo 变量值为:${vrm}
echo "myql服务器运行正常!"
else
echo "mysql挂了,你个二比"
fi
[root@localhost tmp]#
[root@localhost tmp]# bash test_mysql.sh
--------服务器端口监控方法1:使用netstat
mysql挂了,你个二比
--------服务器端口监监控方法2:使用ss
mysql挂了,你个二比
--------服务器进程监控方法1:ps
变量值为:2
myql服务器运行正常! ##grep -v 在shell脚本里去除本身grep的进程,如果用sh和bash调用脚本好像有问题,用source或点调用是没问题;所以如果加定时器最好用点或者source调用
[root@localhost tmp]# sh test_mysql.sh
--------服务器端口监控方法1:使用netstat
mysql挂了,你个二比
--------服务器端口监监控方法2:使用ss
mysql挂了,你个二比
--------服务器进程监控方法1:ps
变量值为:2
myql服务器运行正常! ###grep -v 在shell脚本里去除本身grep的进程,如果用sh和bash调用脚本好像有问题,用source或点调用是没问题;所以如果加定时器最好用点或者source调用
[root@localhost tmp]# . test_mysql.sh
--------服务器端口监控方法1:使用netstat
mysql挂了,你个二比
--------服务器端口监监控方法2:使用ss
mysql挂了,你个二比
--------服务器进程监控方法1:ps
mysql挂了,你个二比
[root@localhost tmp]# source test_mysql.sh
--------服务器端口监控方法1:使用netstat
mysql挂了,你个二比
--------服务器端口监监控方法2:使用ss
mysql挂了,你个二比
--------服务器进程监控方法1:ps
mysql挂了,你个二比
[root@localhost tmp]#
[root@localhost tmp]# systemctl start mysqld ###启动服务
[root@localhost tmp]# bash test_mysql.sh
--------服务器端口监控方法1:使用netstat
myql服务器运行正常!
--------服务器端口监监控方法2:使用ss
myql服务器运行正常!
--------服务器进程监控方法1:ps
变量值为:3 ######这个值有问题,测试过将值写入到log文件,但是日志
myql服务器运行正常!
[root@localhost tmp]#
grep -v 在shell脚本里去除本身grep的进程,如果用sh和bash调用脚本好像有问题(已核实应该是父子shell的缘故,用点或者source是当前环境执行;而其他shell都是要开启其他sh或bash),用source或点调用是没问题;所以如果加定时器最好用点或者source调用
echo "--------服务器进程监控方法1:ps"
vrm=`ps -ef|grep mysql|grep -v 'grep' |wc -l`
`ps -ef|grep mysql|grep -v grep> ./mylog.log`
if [ ${vrm} -ge 1 ]
then
echo 变量值为:${vrm}
echo "myql服务器运行正常!"
else
echo "mysql挂了,你个二比"
fi
[root@localhost tmp]# bash test_mysql.sh
--------服务器端口监控方法1:使用netstat
myql服务器运行正常!
--------服务器端口监监控方法2:使用ss
myql服务器运行正常!
--------服务器进程监控方法1:ps
变量值为:3 ######查看日志
myql服务器运行正常!
[root@localhost tmp]# cat mylog.log
mysql 10416 1 0 14:28 ? 00:00:15 /usr/sbin/mysqld
root 11627 11033 0 14:57 pts/0 00:00:00 bash test_mysql.sh
root 11641 11627 0 14:57 pts/0 00:00:00 bash test_mysql.sh
[root@localhost tmp]#
[root@localhost tmp]# source test_mysql.sh ####用
--------服务器端口监控方法1:使用netstat
myql服务器运行正常!
--------服务器端口监监控方法2:使用ss
myql服务器运行正常!
--------服务器进程监控方法1:ps
变量值为:1
myql服务器运行正常!
[root@localhost tmp]# cat mylog.log
mysql 10416 1 0 14:28 ? 00:00:15 /usr/sbin/mysqld
[root@localhost tmp]#
另用其他脚本调用
#如果开发了php或者其他脚本
##先执php读取mysql脚本
###根据命令返回值判断mysql是否存活
####方法4调用php 或者python
php /shell_program/scripts/mysql_test.php ###因为没写对应脚本,就不展示了
if [ "$?" -eq 0 ]
then
echo "myql服务器运行正常"
else
echo "mysql挂了,你个二比"
fi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!