当前位置: 首页 > news >正文

linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法

系统进程运行异常崩溃后,自动重启的方法

有的公司,会写monitor守护进程,监视各个进程的运行状态,异常时,自动重启,但是这种,通过一个进程
监护一个进程的做法,不太完美,也是有崩溃的风险。

1、从硬件层面
一般大产品,如汽车,是不能完全依赖这种技术方案的,会外接一个mcu,来监控soc,通过soc发送心跳包,1
s发送一次,mcu能收到就soc还活着的信号,如果soc没有正常发送心跳包,说明soc已经挂掉,整个操作系统崩溃掉
mcu就可以通过,供电,给复位引脚一个电平信号,重启soc。

这种是针对整个soc,系统崩溃的方法。下面是软件层面,进程崩溃的重启方法。

1、看门狗技术
soc的内部是有看门狗的,可以通过看门狗,检测soc,某个进程是否卡死,跑飞,如果没有及时喂狗,说明程序异常,强制重启系统

2、通过脚本,监控进程,类似心跳包
这种就是init下,设置系统

init 守护进程是 Linux 内核执行的第一个进程,它的进程 ID (PID) 始终为 1。它的目的是初始化、管理和跟踪系统服务和守护进程。换句话说,init 守护进程是系统上所有进程的父进程。

要创建一个服务,需要编写 shell 脚本,并存储在 /etc/init.d/ 目录下,通过 service 命令启动、停止、重新启动服务。例如如下的 /etc/init.d/myservice

#!/bin/shMAXRSTCOUNT=5;
PROCTOGO=/mnt/hgfs/code/test/show#count is the counter of test started times
count=0sys_reboot()
{echo "system is going to reboot";reboot;
}main_loop()
{while :do#########################################ProStillRunning=$(ps -aux |grep "${PROCTOGO}" |grep -v "grep")if [ -z "$ProStillRunning" ]; then#start testchmod +x ${PROCTOGO}${PROCTOGO}fi#the running times counterlet count=count+1echo "test running times is $count"#wait for test stoping...sleep 3#########################################done
}main_loop;

etc/init.d/monitor-app.sh

#!/bin/bash
sleep 40while [ 1 ]
dofor procname in appdopgrep $procname > /dev/nullif [ 0 -ne $? ]then/etc/init.d/autoapp start &   ##autoapp可以是脚本,app等fidonesleep 30
done

etc/init.d/automhclient

#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bincase "$1" instart)echo -n "Starting automhclient: "export DISPLAY=:0cd /usr/share/qt5/app/mhclient./automhclient &echoexit 0;;stop)echo -n "Shutting down automhclient: "killproc automhclientecho;;restart)echo -n "Restarting automhclient: "$0 stop$0 startecho;;*)echo "Usage: $0 start|stop" >&2exit 3;;
esac

3、crontab

使用Linux的crontab和while循环配合pgrep和kill命令来监控并在进程崩溃时自动重启指定的进程。以下是一个简单的脚本示例,用于监控名为myprocess的进程,并在它崩溃时自动重启它:

#!/bin/bash# 要监控的进程名
PROCESS_NAME="myprocess"# 无限循环检查进程是否运行
while true; do# 使用pgrep查找进程PROCESS_ID=$(pgrep ${PROCESS_NAME})# 如果进程不存在,启动进程if [ -z "$PROCESS_ID" ]; thenecho "${PROCESS_NAME} is not running. Starting it..."/path/to/${PROCESS_NAME} &fi# 暂停10秒钟,然后重新检查进程状态sleep 10
done

linux监控自动重启崩溃的进程
可以使用Linux的crontab和while循环配合pgrep和kill命令来监控并在进程崩溃时自动重启指定的进程。以下是一个简单的脚本示例,用于监控名为myprocess的进程,并在它崩溃时自动重启它:

#!/bin/bash# 要监控的进程名
PROCESS_NAME="myprocess"# 无限循环检查进程是否运行
while true; do# 使用pgrep查找进程PROCESS_ID=$(pgrep ${PROCESS_NAME})# 如果进程不存在,启动进程if [ -z "$PROCESS_ID" ]; thenecho "${PROCESS_NAME} is not running. Starting it..."/path/to/${PROCESS_NAME} &fi# 暂停10秒钟,然后重新检查进程状态sleep 10
done

将上述脚本保存为一个文件,例如monitor.sh,并给予执行权限:

chmod +x monitor.sh

然后,使用crontab将其设置为随系统启动自动运行:
crontab -e
在打开的编辑器中添加以下行,使脚本在登录时自动运行:

@reboot /path/to/monitor.sh &
确保将/path/to/monitor.sh替换为脚本的实际路径。这样,即使进程崩溃,myprocess也会被自动重启。

4、systemd机制重启

systemd设置进程重启
在systemd中,如果你想要设置一个服务在崩溃时自动重启,你可以通过配置服务的Restart属性来实现。

编辑服务的systemd配置文件。这通常位于/etc/systemd/system/目录下,并且文件名通常与服务同名。

在配置文件中,找到[Service]部分,并添加或修改Restart属性。

例如,如果你想要让一个名为my-service.service的服务在崩溃时自动重启,你可以这样设置:

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/my-service

在这个例子中,Restart=always表示无论退出状态如何,服务都会尝试重启。

保存配置文件并退出编辑器。

重新加载systemd管理器配置,以确保新的设置生效:

sudo systemctl daemon-reload
如果服务正在运行,你可能需要停止并启动服务来应用新的重启策略:

sudo systemctl restart my-service.service
确保在应用这些更改之前理解服务的逻辑并考虑可能的副作用,例如,频繁的重启可能会导致系统资源耗尽。

6、monit或supervisor
/etc/init.d目录通常包含特定服务的启动脚本,这些脚本用于初始化(init)、启动、停止、重启或检查系统服务的状态。

要监控/etc/init.d中的自动重启程序,可以编写一个shell脚本或使用现有的监控工具,如monit或supervisor。以下是一个使用monit的示例:

安装monit:

sudo apt-get install monit
配置monit:

编辑/etc/monit/monitrc文件,添加对服务的监控配置。

check process my_service with pidfile /var/run/my_service.pid
start program = “/etc/init.d/my_service start”
stop program = “/etc/init.d/my_service stop”
if failed host 127.0.0.1 port 25 then restart
if 3 restarts within 5 cycles then timeout
启动monit:

sudo monit
monit将监控指定的进程或服务,并在它失败时自动重启。

确保替换my_service为你的服务名称,并调整if failed和重启策略以符合你的需求。

7、总结

还有一种方法,没有研究过,用到再说
系统关机时,systemed也好,init也好,会去关掉所有运行进程,说明系统对进程是一直监控状态的
ps -aux可以看到进程的运行状态,init是个守护进程,对僵死进程进行回收,那么肯定有种方法,可以重启进程
在rcS文件里,是可以设置重启的,具体怎么设置,无非那几个文件inittab,init.d,rcS

相关文章:

linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法

系统进程运行异常崩溃后,自动重启的方法 有的公司,会写monitor守护进程,监视各个进程的运行状态,异常时,自动重启,但是这种,通过一个进程 监护一个进程的做法,不太完美,…...

【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);

前言 🌟🌟本期讲解关于锁的相关知识了解,这里涉及到高频面试题哦~~~ 🌈上期博客在这里:【JavaEE初阶】深入理解线程池的概念以及Java标准库提供的方法参数分析-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&am…...

详解Redis分布式锁在SpringBoot的@Async方法中没锁住的坑

背景 Redis分布式锁很有用处,在秒杀、抢购、订单、限流特别是一些用到异步分布式并行处理任务时频繁的用到,可以说它是一个BS架构的应用中最高频使用的技术之一。 但是我们经常会碰到这样的一个问题,那就是我们都按照标准做了但有时运行着、…...

怎么做接口自动化测试

在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比&#xff0…...

网络编程(18)——使用asio协程实现并发服务器

十八、day18 到目前为止,我们以及学习了单线程同步/异步服务器、多线程IOServicePool和多线程IOThreadPool模型,今天学习如何通过asio协程实现并发服务器。 并发服务器有以下几种好处: 协程比线程更轻量,创建和销毁协程的开销较…...

Koa2项目实战2(路由管理、项目结构优化)

添加路由(处理不同的URL请求) 路由:根据不同的URL,调用对应的处理函数。 每一个接口服务,最核心的功能是:根据不同的URL请求,返回不同的数据。也就是调用不同的接口返回不同的数据。 在 Node…...

决战Linux操作系统

前言: 你是否也曾经为Linux所困扰过,在网上找的资料零零散散,是否学完Linux后还是懵懵懂懂,别怕,这篇博客是博主精心为你准备的,现在,就让我们一起来走进Linux的世界,决战Linux&…...

OceanBase 3.2.2 数据库问题处理记录

只记录OceanBase 数据库与OCP的异常处理,其它组件暂时不写录。 一、问题1: 说明:OMS 出现异常,无法访问(OB无法访问) OB数据库架构:1:1:1 原因:某一台OBserver因为内存问题,被服务器直接kill掉…...

HCIP--以太网交换安全(二)端口安全

端口安全 一、端口安全概述 1.1、端口安全概述:端口安全是一种网络设备防护措施,通过将接口学习的MAC地址设为安全地址防止非法用户通信。 1.2、端口安全原理: 类型 定义 特点 安全动态MAC地址 使能端口而未是能Stichy MAC功能是转换的…...

在 Windows 11 安卓子系统中安装 APK 的操作指南

这个软件好像不可以在纯android系统中使用(不知道是缺了什么),其他对于android的虚拟机要不缺少必要功能组件,要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…...

[C语言] 函数详解:库函数与自定义函数

文章目录 函数的概念库函数和自定义函数库函数使用库函数示例常用库函数及头文件 自定义函数自定义函数的基本结构示例:实现两个数的求和函数自定义函数的好处 函数的返回值有返回值的函数无返回值的函数 函数的声明与调用声明函数在另一个文件中调用函数示例&#…...

0x11 科迈 RAS系统 Cookie验证越权漏洞

参考: 科迈 RAS系统 Cookie验证越权漏洞 | PeiQi文库 (wgpsec.org)免责声明 欢迎访问我的博客。以下内容仅供教育和信息用途: 合法性:我不支持或鼓励非法活动。请确保遵守法律法规。信息准确性:尽管我尽力提供准确的信息,但不保证其完全准确或适用。使用前请自行验证。风…...

MoonBit 双周报 Vol.57:AI助手功能增强、表达式优先级调整、JS 交互优化、标准库与实验库API多项更新!

2024-10-08 IDE更新 AI Codelens支持 /generate 和 /fix 命令 /generate 命令能够提供一个通用的用以生成代码的聊天界面。 /fix 命令能够读取当前函数的错误信息给出修复建议。 MoonBit更新 调整中缀表达式和if、match、loop、while、for、try表达式的优先级, 后者这些控制…...

element ui input textarea控制显示高度

样式代码 .testPage { position: absolute; left: 0; top: 0; right: 0; bottom: 0; display: flex; height: 100%; /* 控制输入框高度 */ .el-textarea { height: 90%; ::v-deep .el-textarea__inner { height: 90%; } } }...

Chromium 中chrome.downloads扩展接口c++

一、前端chrome.downloads 使用 chrome.downloads API 以编程方式启动、监控、操作和搜索下载内容。 权限 downloads 您必须在扩展程序清单中声明 "downloads" 权限,才能使用此 API。 {"name": "My extension",..."permiss…...

微信小程序常见问题

一、编译报错 [ app.json 文件内容错误] app.json: 在项目根目录未找到 app.json 解决办法: 微信开发者工具中打开设置->安全设置->打开服务端口用HBuilder X打开小程序文件夹,点击“运行到小程序模拟器”,生成配置文件,…...

进程的理解

进程的理解 目录: 什么是进程主要特征主要组成部分进程状态进程优先级 1.什么是进程 概念: 在操作系统中,**进程(Process)**是一个正在执行的程序实例。可以将进程理解为一个动态的实体,它不仅包括静态…...

LeetCode494:目标和

题目链接&#xff1a;494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int sum 0;for(int i 0; i < nums.size(); i){sum nums[i];}if(abs(target) > sum)…...

vue3中自定义校验函数密码不生效问题

vue3中自定义校验函数密码不生效问题 由于在自定义的校验规则中只校验了有数据的情况&#xff0c;以至于在没输入时&#xff0c;校验不生效 &#xff08;1&#xff09;用户不输入校验不生效 const validateSurePassword (rule, value, callback) > {if (value ! ) {if (…...

RabbitMQ(死信队列)

一、本文抒写背景 前面我也在延迟队列篇章提到过死信队列&#xff0c;也提到过一些应用场景&#xff01; 今天呢&#xff0c;这篇文章&#xff0c;主要就是实战一个业务场景的小Demo流程&#xff0c;哈哈&#xff0c;那就是延迟关闭订单。 二、开始啦&#xff01;letgo! 首…...

从RTL Viewer到仿真波形:用Quartus II给你的Verilog代码做一次‘可视化体检’

从RTL Viewer到仿真波形&#xff1a;用Quartus II给你的Verilog代码做一次‘可视化体检’ 在数字电路设计的浩瀚宇宙中&#xff0c;Verilog代码就像工程师手中的魔法咒语&#xff0c;但如何确认这些咒语真正转化成了预期的电路结构&#xff1f;Quartus II提供的RTL Viewer与仿真…...

【笔记】旧AI,新人类

AI擅长"旧"&#xff0c;人类擅长"新" 关于人机分工的一点思考 不久前&#xff0c;一场颇具戏剧性的"人机对决"在餐饮界引起了不小的波澜。"美膳狮"智能炒菜机器人与湘菜厨师杨孙同台竞技&#xff0c;共同炒制三道菜&#xff1a;XO酱笋…...

3步掌握TEdit地图编辑器:泰拉瑞亚终极创作工具完全指南

3步掌握TEdit地图编辑器&#xff1a;泰拉瑞亚终极创作工具完全指南 【免费下载链接】Terraria-Map-Editor TEdit - Terraria Map Editor - TEdit is a stand alone, open source map editor for Terraria. It lets you edit maps just like (almost) paint! It also lets you c…...

3种高级策略突破AI编辑器限制:Cursor Pro逆向工程技术解析

3种高级策略突破AI编辑器限制&#xff1a;Cursor Pro逆向工程技术解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your…...

终极指南:3步让苹果触控板在Windows上获得原生级体验

终极指南&#xff1a;3步让苹果触控板在Windows上获得原生级体验 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad …...

嵌入式操作系统选型实战指南:从硬件约束到商业考量的五维决策框架

1. 项目概述&#xff1a;一个困扰无数工程师的经典难题干了十几年嵌入式&#xff0c;从8位单片机玩到多核ARM&#xff0c;从裸机撸到各种RTOS&#xff0c;再到Linux、Android&#xff0c;最常被问到也最头疼的问题之一就是&#xff1a;“老大&#xff0c;新项目用哪个操作系统好…...

知网维普万方 AIGC 算法差异详解!TOP5 降 AI 软件帮你 3 个平台一次合格

知网维普万方 AIGC 算法差异详解&#xff01;TOP5 降 AI 软件帮你 3 个平台一次合格 很多同学不知道——同一篇论文送知网、维普、万方测出来的 AI 率可能差 20-30 个点。3 个检测平台的算法逻辑完全不一样。 这篇文章把 3 个平台的算法差异拆给你看 TOP5 工具对位推荐——TOP…...

运算放大器:从虚短虚断到负反馈,掌握模拟电路核心设计

1. 从“石头”与“水库”到“运算放大器”&#xff1a;一个电子世界的演化故事如果你拆开过任何一台现代电子设备&#xff0c;从手机到汽车&#xff0c;从血糖仪到工业机器人&#xff0c;你大概率会找到一个或多个不起眼的八脚或十四脚黑色小方块——运算放大器。它不像CPU那样…...

高端工程场景实测:OpenAI Codex CLI 在微服务重构中的 3 类能力边界

1. 微服务重构现场:Codex CLI 不是万能胶,但能精准补上三块关键拼图 我接手一个运行了四年的电商微服务集群时,它正卡在「订单履约链路」的重构临界点上。17个服务、32个跨服务调用点、4种异步消息协议、2套数据库分片策略——人工梳理接口契约要两周,写迁移脚本要三天,验…...

Hotkey Detective:重塑Windows键盘操作的透明化洞察

Hotkey Detective&#xff1a;重塑Windows键盘操作的透明化洞察 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾在…...