今日小练题目📢
编写一个巡检脚本,用来检测系统里面所有服务是否都正常运行。 假定,系统运行的服务有Nginx、MySQL、Redis、Tomcat 要求脚本有内容输出,可以明确告知服务是否正常运行。
优秀作业🤌🏻
#!/bin/bash
#author:xYLiuuuuuu
#version:v1
#date:2024-12-20
check_tools()
{
if ! which pgrep &>/dev/null
then
echo "本机没有pgrep命令"
exit 1
fi
if ! which ss &>/dev/null
then
echo "本机没有ss命令"
exit 1
fi
}
check_ps()
{
if pgrep "$1" &>/dev/null
then
return 0
else
return 1
fi
}
check_ss()
{
port_n=`ss -lnp|grep ":$1 "|wc -l`
if [ $port_n -ne 0 ]
then
return 0
else
return 1
fi
}
check_srv()
{
if check_ps $1 && check_port $2
then
echo "$1服务正常"
else
echo "$1服务不正常"
fi
}
check_tools
check_srv mysql 3306
check_srv redis 6379
check_srv nginx 443
check_srv java 8825
敲黑板📝
- 如果将一条命令的结果作为if的判断条件,则当命令执行成功时条件为真,也就是说当返回值为0时,条件为真.....所以要取反❗
- pgrep后面跟进程名关键字即可将相关进程的pid列出来
# 加-i参数不区分大小写
$ pgrep -i ssh
# 自定义输出分隔符
$ pgrep -d , sshd
1709,97535,97549
# 同时显示PID和ProcessName
$ pgrep -l sshd
3686 sshd
7907 sshd
8815 sshd
12874 sshd
# 加-a参数显示用于启动每个进程的完整命令
$ pgrep -u himanshu -a
# -o 当匹配多个进程时,显示进程号最小的那个
# -n 当匹配多个进程时,显示进程号最大的那个
-
查看端口进程等的命令有
lsof -i :80:列出所有正在使用 80 端口的进程。netstat -tulnp | grep 8080:查找占用8080端口的进程。- 其中
-t表示显示 TCP 连接,-u表示显示 UDP 连接,-n表示以数字形式显示地址和端口,-l表示显示监听状态的端口,-p表示显示对应的程序和 PID。
- 其中
ps aux | grep tomcat:显示tomcat的进程信息。lsof -i:22可以查看占用端口 22 的程序。
-
ps命令
# 查看CPU/内存占用率最高的进程
# -降序+升序 pcpuCPU pmem内存
$ps -aux --sort=-pcpu | head -11
$ps -aux --sort=+pmem | head -11
# 如果不限制行数,也可以使用sort按照指定的列排序
$ps -aux | sort -nk 4 -r 降序
$ps -aux | sort -nk 4
# 查看某个用户开启了哪些线程
$ps -u root -ef
# 分页查看进程
$ps -ef | more