Linux下使用Shell脚本实现进程监控

news2024/9/30 19:42:22

本文介绍一种在Linux系统下为实现某些关键进程状态的实时监控而使用shell脚本的编写方法。在这里主要通过监控某些进程是否退出作为判断依据,如果某个进程退出了,则进行对应的恢复处理,如重新拉起相关的进程等。

下面介绍该脚本的实现流程。

首先生成一个名为”process_check.sh”的脚本,脚本内容如下:

#!/bin/bash

#该函数检查关键进程的状态,最终返回进程的个数。
checkprocess()
{
#       echo "checkprocess...$1"
        if [ "$1" = "" ];
        then
                return 1
        fi
        process_num=`ps -ef|grep "$1" |grep -v "grep" |wc -l`
#       echo "checkprocess num=$process_num"
        return $process_num
}
#进程如有退出,则记录相关的信息,并做相关的处理
recordinfo()
{
#       echo "check $1"
        if [ "$1" = "" ];
        then
                return
        fi
#打印进程退出的时间
        date "+++++++++++++++++++ +%Y-%m-%d %H:%M:%S '$1' exit! +++++++++++++++++++"
#重新拉起这个进程
        "$1" &
        echo "restart $1"
}

#检查进程的状态
check()
{
        echo "####check $1"
        if [ "$1" = "" ];
        then
                return
        fi
        checkprocess "$1"
        check_result=$?
#如果该进程的个数为0,则说明该进程已经退出
        if [ $check_result -eq 0 ];
        then
                recordinfo "$1"
#               exit
        fi
}
#循环检测
while [ 1 ] ; do
        #关键进程列表,多个进程以逗号分隔,这里以两个进程为例子。
        process_name="./test1,./test2"
        OLD_IFS="$IFS"
        IFS=","
        arr=($process_name)
        IFS="$OLD_IFS"

        for s in ${arr[@]}
        do
          check "$s"
        done
        sleep 3
#       echo "check loop..."
done

测试验证

这里写一个简单的测试程序,代码如下:

void main()
{
        while(1) {
                sleep(3);
        }
}

编译后生成两个名为“test1”,“test2”的可执行文件。

为了方便测试,可以将”process_check.sh”,”test1”,”test2”放置于同一个目录下。

  1. 运行”process_check.sh”,如下所示:

从上图可知,”test1”,”test2”刚开始并未被拉起,运行”process_check.sh”之后,检测出”test1”,”test2”不存在,则触发拉起的机制,最终”test1”,”test2”被启动了。

  1. 运行过程中kill掉某一个进程,验证”process_check.sh”是否有将该进程拉起。

由下图可知,被kill的进程最终又被拉起了。

至此,该脚本的功能已被验证完毕。

结语:在 Linux 平台下,shell 脚本监控是一个非常简单、方便的工具,它可以有效的对服务器、进程进行监控,对系统开发以及进程维护人员非常有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis之增、删、查、改

目录 前言 一、配置MyBatis开发环境 1.1 创建数据库和表 1.2 添加框架支持 1.3 创建目录结构 1.4 配置数据库连接 1.5 配置MyBatis中的XML文件路径 二、添加业务代码 2.1 查询数据库操作 2.1.1 添加实体类 2.1.2 添加mapper接口 2.1.3 在xml中实现mapper接口 2.1.…

【数据挖掘实战】——中医证型的关联规则挖掘(Apriori算法)

目录 一、背景和挖掘目标 1、问题背景 2、传统方法的缺陷 3、原始数据情况 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体过程 第1步:数据获取 第2步:数据预处理 第3步:构建模型 三、思考和总结 项目地址:Data…

jQuery:入门

jQuery 入门 Date: January 19, 2023 目标: 能够说出什么是 jQuery 能够说出 jQuery 的优点 能够简单使用 jQuery 能够说出 DOM 对象和 jQuery 对象的区别 jQuery 概述 JavaScript 库 仓库: 可以把很多东西放到这个仓库里面。找东西只需要到仓库里…

vue中子组件间接修改父组件传递过来的值

一、前言 Vue官方文档Props单向数据流讲解 Vue中遵循单向数据流,所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况&a…

分布式算法 - ZAB算法

ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议), 它应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为它是为 Zookeeper 设计的分布式一致性协议!什么是 ZAB 协议? ZAB 协议…

Java基本数据类型

1.概述 佛说,大千世界,无奇不有。在这个世界里,物种的多样性,遍地开花,同样,在Java的世界里,也有着异曲同工之妙,Java秉承面向对象的特性,必然少不了区分对象的类型&…

【安全知识】——端口复用隐藏后门

作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤: 精彩的人生是在有限的生命中实现无限价值端口复用是…

【C++】类和对象的六个默认成员函数

类的6个默认成员函数构造函数概念特性析构函数概念特性拷贝构造函数概念特征拷贝构造函数典型调用场景:赋值运算符重载运算符重载赋值运算符重载取地址及const取地址操作符重载类的6个默认成员函数 到底什么是类的6个默认成员函数呢?相信大家一定对此怀…

2023安装archlinux笔记

本文只是个笔记,不是详细教程,仅供参考。 安装过程基本与 《2021年vmware安装archlinux》 https://blog.csdn.net/lxyoucan/article/details/115226297 差不多。 无U盘安装 不想格式化U盘了,直接从硬盘安装。参考一下文章。 《没有U盘纯硬…

什么是全站加速(DCDN)

全站加速(DCDN) 在阅读本文之前,如果你还没有看过 你管这玩意儿叫CDN 这篇文章,可以先去看一下,然后再来阅读本文,效果会更好一些。 什么是全站加速 全站加速DCDN(Dynamic Route for Content…

每日分享(苹果CMS V10仿韩剧TV主题模板源码)

demo软件园每日更新资源,请看到最后就能获取你想要的: ​ 1.低代码引擎技术白皮书 PDF高清版 低代码引擎是一款为低代码平台开发者提供的,具备强大定制扩展能力的低代码设计器研发框架。本白皮书从应用、基础协议和原理三个方面对低代码引擎的技术进行了全面的介绍…

计算机网络体系结构及分层参考模型

文章目录一、分层设计思想的提出二、网络分层的必要性三、什么是计算机网络体系结构四、计算机网络参考模型OSI参考模型/五层参考模型/TCP/IP参考模型一、分层设计思想的提出 最早提出分层思想的是 ARPANET网。1969年11月,美国国防部开始建立一个命名为ARPANET的网络…

c++编程入门到精通(四) 编译过程详解(g++ 编译选项 & cmake编译初解 vscode调试c++)

目录1. g编译基础1.1 g编译过程简述1.2 安装2.g编译过程2.1 g编译选项2.2 g编译实例2.2.1直接编译2.2.2 生成库文件并编译2.2.3 运行可执行文件3. cmake初步3.1 基本特点3.2 CMake基础3.2.1 CMake常见指令3.2.2 CMake常用变量4. CMake编译工程4.1两种方式设置编译规则&#xff…

生活中我们的那些疑惑

在我们日常生活我们大多数都没有天生优势,怎么样让我们创新力和创造力得到最大限度的发挥?也是决定我财商的大小的基础。通过学习努力不断提升我们自身的认知,把认知不确定性尽量降低。 在认知方面,积极情绪最大的作用是让我们更愿…

(四十一)Read Committed隔离级别是如何基于ReadView机制实现的?

今天我们来给大家讲一下,基于之前我们说的ReadView机制是如何实现Read Committed隔离级别的,那么当然了,首先就是要先做一些简单的回顾。所谓的Read Committed隔离级别,我们可以用骚气一点的名字,就是简称为 RC 隔离级…

Java开发环境搭建

什么是JDK、JREJVM 简介JDK下载Hello WorldJava程序开发的三个步骤编写编译运行什么是JDK、JRE JDK ( J ava D evelopment K it):是Java程序开发工具包,包含JRE和开发人员使用的工具。JRE(Java Runtime Environment&a…

数据库管理-第五十八期 倒腾PDB(20230226)

数据库管理 2023-02-26第五十八期 倒腾PDB1 克隆本地PDB2 没开归档总结第五十八期 倒腾PDB 其实本周过的不大好,连着两天熬夜,一次是割接一次是处理ADG备库的异常,其实本周有些内容是以前处理过的问题,到了周末还肚子痛。哎… 1…

【数据库】 第11章 并发控制

第11章 并发控制 事务 事务:(从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数 据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合 在一起作为一个整体进行操作和控制,以便数据库管理系统能…

【Linux驱动开发100问】什么是Linux内核?

🥇今日学习目标:什么是Linux内核? 🤵‍♂️ 创作者:JamesBin ⏰预计时间:10分钟 🎉个人主页:嵌入式悦翔园个人主页 🍁专栏介绍:Linux驱动开发100问 什么是Lin…

SpringMVC源码:DispatcherServlet初始化流程

参考资料: 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》​​​​​​​ 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 目录 前文 1、简介 2…