【需求】 编写一个巡检脚本,用来检测系统里面所有服务是否都正常运行。假定,系统运行的服务有Nginx、MySQL、Redis、Tomcat。要求脚本有内容输出,可以明确告知服务是否正常运行。 提示:
【解析】 这脚本看起挺热闹,其实非常简单 只需要搞清楚如何确认进程在不在、端口在不在即可 查看一个进程在不在使用: ps aux|grep 'xxx' 这是核心命令 先举例子吧 ps aux |grep systemd 这样可以查看所有包含systemd关键词的进程,但是有一点要注意啊 最后一行,可不是systemd的进程,而是grep的进程,因为我们的命令里有grep 所以,你最好是将grep给排除掉 这样就准确了 所以,检测nginx进程在不在,就用 ps aux |grep nginx |grep -v grep 最终,我们判断一个进程在不在,还需要计算一下这个命令的输出有几行 ps aux |grep nginx |grep -v grep |wc -l 将其赋值到一个变量里,再针对变量进行数字比对即可 在这,我再给大家分享一个查看进程在不在的方法 pgrep systemd 这个命令可以查看指定进程的ID,你可以对比上面的截图看看,是不是和ps出来的进程一样呢,而且这样更加准确了,这个一定是systemd进程 再来看端口 netstat -lnp 它是查看系统监听端口的命令 所以查看443端口在不在,可以这样操作 netstat -lnp |grep 443 看它有没有输出结果 当然,这个不一定准确 比如有一个1443的监听端口,你用上面的命令也能匹配到 所以,这里需要额外加一个修饰 netstat -lnp |grep ':443 ' 也就是在端口号前面加个:后面加个空格,这样就精准了 脚本中还有一个地方,只有进程和端口都没有问题,才算服务正常 所以判断的时候要注意一下 另外,如果没有netstat,使用ss也可以,用法意义 ss -lnp|grep ':443 ' 【参考答案】 #!/bin/bashcheck_ps(){ if pgrep '$1' &>/dev/nullthenreturn 0elsereturn 1fi}check_port(){if ! which netstat &>/dev/nullthenecho 'netstat 命令不存在,自动安装.' yum install -y net-toolsif [ $? -ne 0 ]thenecho 'netstat命令安装失败,使用ss' ln -s /usr/sbin/ss /bin/netstatfifi port_n=`netstat -lnp|grep ':$1 '|wc -l`if [ $port_n -ne 0 ]thenreturn 0elsereturn 1fi}check_srv(){if check_ps $1 && check_port $2thenecho '$1服务正常'elseecho '$1服务不正常'fi}check_srv nginx 443check_srv mysql 3306check_srv redis 6379check_srv java 8825 补充: 1)要考虑netstat命令不存在的情况,不存在需要安装net-tools工具,安装不上就使用ss,ss用法和netstat基本一样 2)tomcat进程是java |
|
来自: lifebegins40s > 《linux》