Shell脚本之linux服务器服务进程监控

发布于:2022-11-09 ⋅ 阅读:(21) ⋅ 点赞:(0) ⋅ 评论:(0)

一、需求说明

  作为一名主机运维工程师,日常工作中我们每天都需要巡检服务器的运行情况,包括服务器的网络通断性、磁盘利用率、服务进程等内容。为了减少工作量我们可以通过编写shell脚本,实现服务器的批量巡检。写好脚本之后我们可以设置定时任务,将巡检结果邮件发送给自己就OK啦。为了检查服务进程是否存在,我们常用命令ps -ef |grep 关键字 过滤查看我们的进程是否存在。此脚本就是基于此命令的基础上实现的。

二、脚本设计及内容

1、设计思路说明

  • 通过ssh免密,使用ssh直接远程执行命令;Linux之SSH免密登录配置
  • 使用pgrep -f 关键字命令查看进程是否存在;
  • 使用$?判断进程号是否为空;
  • 将结果存储到检查日志记录文件;
  • 如果有进程不存在则邮件告知不存在信息,每天早上7点、晚上9点明确通知检查结果;Linux之mailx软件安装及使用
  • 清理超过30天的巡检记录。

2、待巡检进程列表说明

  将待巡检进程信息写入processes.txt文件中,文件中包括4列信息,主机名,ssh端口号,进程服务关键字,进程服务描述说明。processes.txt各列的分隔符是空格,所以关键字中不能包含空格哦。
在这里插入图片描述

3、脚本内容

#!/bin/bash
#script name: process_check.sh
#author: wuhs
#description: 此脚本用于系统进程服务巡检

#参数定义
#巡检日志存储路径
resultlog='/root/scripts/xunjian/process/recordlog'
#待巡检进程列表
processes="/root/scripts/xunjian/process/processes.txt"
#进程巡检方法
function process_monitor(){
datedir=`date +%F-%H`
mkdir -p $resultlog/$datedir
#while循环按行读取进程列表
while read line
do
        #获取主机名、ssh端口号、service服务关键字
        host=`echo $line | awk '{print $1}'`
        port=`echo $line | awk '{print $2}'`
        service=`echo $line | awk '{print $3}'`
        #获取service服务的描述说明
        des=`echo $line | awk '{print $4}'`
        #查看进程是否存在
        ssh $host -p $port -n pgrep -f $service &>/dev/null
        #检查结果写入日志文件
        if [ $? -eq 0 ];then
                echo "$host $des 正常" >> $resultlog/$datedir/success.log
        else
                echo -e "$host $des 未启动" >> $resultlog/$datedir/faild.log
        fi      
done <"$processes"

#邮件通知检查结果
if [ -s $resultlog/$datedir/faild.log ]; then
        mailx -s "进程巡检有进程不存在,请检查" 1234567qq@qq.com < $resultlog/$datedir/faild.log
else
        hour=`date +%H`
        if [[ $hour == 07 || $hour == 21 ]]; then
                mailx -s "进程巡检正常!" wuhsh@bigdatayh.com,524627027@qq.com < $resultlog/$datedir/success.log
        fi
fi
}
#清理超过30天的进程巡检日志记录
function log_clear(){
    cd $resultlog
    find -type d -mtime +30 |xargs rm -rf
}

function main(){
    #系统服务检查
    process_monitor
    log_clear
}

main

三、使用示例

1、手动执行

#mkdir -p /root/scripts/xunjian/process
#创建工作目录,将脚本内容写入process_check.sh后保存,记得修改接受告警邮件的邮箱。
#chmod u+x process_check.sh
#脚本添加执行权限,将待巡检进程列表按照格式存入processes.txt文件中
#sh process_check.sh
#执行脚本,可以通过查看巡检日志文件获取巡检结果,也可以通过配置正确的邮箱,接受巡检结果。
在这里插入图片描述

2、配置定时任务

  我们可以配置定时任务,设置每小时或者每10分钟执行一次进程巡检,如下示例为每天的早上6点到晚上10点,每个小时执行一次。

[root@s146 process]# crontab -l
####进程巡检定时任务####
1 6-22 * * * /root/scripts/xunjian/process/process_check.sh &>> /tmp/s146-monitor.log

  配置完成定位任务后,我们就喝着茶,坐等巡检结果就好了。收到告警后及时处理。
在这里插入图片描述