[转帖]Linux 监测服务心跳、服务重启策略
前言
请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、
提示:以下是本篇文章正文内容,下面案例可供参考
背景
当服务假死情况下,导致服务不可用,一时间定位不到服务假死原因,可以采用临时应急方案,需要增加探测机制,定时拉起重启服务。
一、curl服务可用验证
注:curl请求地址包含特殊字符时,需要将特殊字符转义,curl字符转义移步第四步
curl http://127.0.0.1:8088/GetResult.json?userName=superAdmin%26password=sadmin_secret_pw -d '{"id":100897}'
- 1
首先,正常运行情况下,适用下述curl指令可以正常返回结果:

二、服务探测脚本
编写shell脚本如下:
#!/bin/bash
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + 1、此脚本为服务监控脚本,与系统定时任务配合使用
# + 2、执行crontab -e进入监控任务配置,配置探测脚本执行时间
# + 3、创建此脚本后请赋予可执行权限chmod +x chk_service.sh
# + 4、普通用户执行docker需要sudo 权限,在执行命令前先设置普通用户密码 !!!
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#获取当前时间
DATE=<span class="token hvariable">date</span> <span class="token operator">+%</span><span class="token constant">Y</span><span class="token operator">%</span><span class="token hvariable">m</span><span class="token operator">%</span><span class="token hvariable">d</span>
#检测地址
httpCode=<span class="token hvariable">curl</span> <span class="token operator">-</span><span class="token hvariable">s</span> <span class="token operator">-</span><span class="token hvariable">o</span> <span class="token operator">/</span><span class="token hvariable">dev</span><span class="token operator">/</span><span class="token builtin">null</span> <span class="token operator">-</span><span class="token hvariable">w</span> <span class="token string">"%{http_code}"</span> <span class="token operator">-</span><span class="token constant">X</span> <span class="token constant">POST</span> <span class="token operator">-</span><span class="token hvariable">d</span> '<span class="token punctuation">{<!-- --></span><span class="token string">"id"</span><span class="token operator">:</span><span class="token number">100897</span><span class="token punctuation">}</span>' <span class="token string">"http://127.0.0.1:8088/GetResult.json?userName=superAdmin&password=sadmin_secret_pw"</span>
#服务端口
ports=8088
#检查服务是否正常
function checkService()
{
echo "执行时间: \((date +%Y'-'%m'-'%d' '%H':'%M':'%S) "</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span> <span class="token string">"\)httpCode"=="200" ));then
echo ""
echo "检测服务正常运行服务可用!"
exit
else
echo ""
echo "检测服务不可用!"
echo "重启检测服务...预计两分钟"
echo "admin123" | sudo -S docker restart 09a380a14b7f
sleep 30s
<span class="token hvariable">status</span><span class="token operator">=</span>`<span class="token hvariable">netstat</span> <span class="token operator">-</span><span class="token hvariable">nltp</span><span class="token operator">|</span><span class="token hvariable">grep</span> <span class="token operator">$</span><span class="token punctuation">{<!-- --></span><span class="token hvariable">ports</span><span class="token punctuation">}</span><span class="token operator">|</span><span class="token hvariable">grep</span> <span class="token operator">-</span><span class="token hvariable">v</span> <span class="token string">"grep"</span>`
<span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token operator">-</span><span class="token hvariable">z</span> <span class="token string">"${status}"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">then</span>
<span class="token hvariable">echo</span> <span class="token string">"docker检测服务重启失败..."</span>
<span class="token hvariable">echo</span> <span class="token string">"再次重启docker检测服务..."</span>
<span class="token hvariable">echo</span> <span class="token string">"admin123"</span> <span class="token operator">|</span> <span class="token hvariable">sudo</span> <span class="token operator">-</span><span class="token constant">S</span> <span class="token hvariable">docker</span> <span class="token hvariable">restart</span> 09a380a14b7f
<span class="token hvariable">exit</span>
<span class="token keyword">else</span>
<span class="token hvariable">echo</span> <span class="token string">"docker检测服务重启完成..."</span>
<span class="token hvariable">exit</span>
<span class="token hvariable">fi</span>
fi
}
checkService #调用函数
三、配置系统定时任务
监控脚本写完之后,便是把该脚本加入到crontab监控任务中了。该过程可以去查看crontab定时任务。我这个设置的是每一分钟执行一次,就是一行指令:先执行crontab -e进入监控任务配置文件位置:
#查看监控任务
crontab -e
#配置任务
/1 * cd /root && sh cront_check.sh >> /root/cront.log
查看效果

四、Linux特殊字符转义
友情提示:在url中直接使用特殊符号会截断命令让命令失去原本意义.,所以我们需要编码转义特殊符号
| 字符 | URL编码值 |
|---|---|
| 空格 | %20 |
| " | %22 |
| # | %23 |
| % | %25 |
| & | %26 |
| ( | %28 |
| ) | %29 |
| + | %2B |
| , | %2C |
| / | %2F |
| : | %3A |
| ; | %3B |
| < | %3C |
| = | %3D |
| > | %3E |
| ? | %3F |
| @ | %40 |
| \ | %5C |
| | | %7C |
总结
我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!
[转帖]Linux 监测服务心跳、服务重启策略的更多相关文章
- [转帖]Linux监测某一时刻对外的IP连接情况
Linux监测某一时刻对外的IP连接情况 https://blog.csdn.net/twt326/article/details/81454171 公司机器有病毒 需要分析一下. 之前有需要,在CS ...
- linux下的audit服务
audit ['ɔːdɪt] 审计 auditd是linux的一个审计服务. 这是man下的解释 auditd is the userspace component to the Linux A ...
- linux下的crontab服务
linux下的crontab服务:1.crontab 是用来让使用者在固定时间或固定间隔执行程序之用在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现.以某一频率执行任务linux缺 ...
- 如何管理linux开机自启服务
如何管理linux开机自启服务? 自启动服务非常重要,例如 (1)需要手动添加希望自启的服务,如安装svn后没有自动添加,就需要我们手动加入(2)安装某些程序后,自动加到自启动了,但我们不需要,需要手 ...
- linux下svn(subversion)服务端添加工程及配置权限
linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...
- 如何在linux下开启FTP服务
如何在linux下开启FTP服务 1. 首先服务器要安装ftp软件,查看是否已经安装ftp软件下: #which vsftpd 如果看到有vsftpd的目录说明服务器已经安装了ftp软件 2. ...
- 【转帖】云平台发现服务构建:为什么不使用ZooKeeper
http://www.chinacloud.cn/show.aspx?id=19979&cid=16 [日期:2015-04-29] 来源:dockerone 作者: [字体:大 中 小] ...
- linux 系统的ssh服务
ssh服务由服务端软件Openssh和客户端(常见的有ssh,SecureCRT,putty,xshell)组成,ssh服务默认使用22端口提供服务,它有两个不兼容的ssh协议版本,分别是1.x和2. ...
- linux应用之vsftp服务的安装及配置(centos)
1.centos中vsftp服务的安装 方法1:rpm方式 #rpm –ivh vsftpd-2.0.5-10.el5.i386.rpm 安装rpm程序包(网上下载的rpm包) 方法2:yum方式 ...
- Linux:定时任务crond服务
一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...
随机推荐
- 2023-09-07:用go语言编写。塔子哥最近在处理一些字符串相关的任务 他喜欢 R 字符,因为在某些任务中,这个字符通常表示“正确”的结果 另一方面,他不喜欢 B 字符,因为在某些任务中,这个字符
2023-09-07:用go语言编写.塔子哥最近在处理一些字符串相关的任务 他喜欢 R 字符,因为在某些任务中,这个字符通常表示"正确"的结果 另一方面,他不喜欢 B 字符,因为在 ...
- Unity3D学习笔记5——创建子Mesh
目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在文章Unity3D学习笔记4--创建Mesh高级接口通过高级API的方式创建了一个Mesh,里面还提到了一个Su ...
- row_number函数的不稳定性
本文分享自华为云社区<row_number函数的不稳定性>,作者: nullptr_ . row_number为窗口函数,用来为各组内数据生成连续排号 基础用法 postgres=# se ...
- 云小课|手把手教您在PyCharm中连接云端资源进行代码调试
摘要:让我们看看如何在PyCharm中连接云端资源进行代码调试吧! 本文分享自华为云社区<[云小课]EI第54课 手把手教您在PyCharm中连接云端资源进行代码调试>,作者:Hello ...
- LiteOS内核源码分析:消息队列Queue
摘要:本文通过分析LiteOS队列模块的源码,掌握队列使用上的差异. 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务:当队列中有新消 ...
- 详解GaussDB(DWS)的CPU资源隔离管控能力
摘要:GaussDB使用cgroup实现了两种cpu管控能力,基于cpu.shares的共享配额管控和基于cpuset的专属限额管控. 本文分享自华为云社区<GaussDB(DWS)的CPU资源 ...
- Kubernetes(K8S) 监控 Prometheus + Grafana
监控指标 集群监控 节点资源利用率 节点数 运行Pods Pod 监控 容器指标 应用程序 Prometheus 开源的 监控.报警.数据库 以HTTP协议周期性抓取被监控组件状态 不需要复杂的集成过 ...
- STM32CubeMX教程16 DAC - 输出3.3V内任意电压
1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK ...
- MP4 视频“只闻其声,不见其人”,是怎么回事呢?
艾瑞巴蒂大家好,我二狗子又来啦!这段时间关于疫情的好消息不断,各个地区的疫情都得到了有效的控制,做到了新增病例个位数增长甚至连续多天零增长!这不,二狗子也终于可以出村回到大城市上班啦!由于要坐很久的火 ...
- 【C++开源库】Windows 下编译 libcurl 库
亲测可用: https://codeantenna.com/a/pJaN3omqjp What is libcurl ? libcurl 是一个跨平台的网络协议库,支持 http, https, ft ...