[转帖]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 ...
随机推荐
- C# 在Word中添加Latex 数学公式和符号
本篇内容介绍使用Spire.Doc for .NET在Word中添加Latex数学公式和符号的方法.编辑代码前,将Spire.Doc.dll文件添加引用至VS程序.dll文件包可通过官网下载导入(如果 ...
- 神经网络入门篇:深度学习和大脑的关联性(What does this have to do with the brain?)
深度学习和大脑的关联性 开始讲故事(手动狗头) 深度学习和大脑有什么关联性吗? 关联不大. 那么为什么会说深度学习和大脑相关呢? 当你在实现一个神经网络的时候,那些公式是你在做的东西,你会做前向传播. ...
- 详解CCE服务:一站式告警配置和云原生日志视图
本文分享自华为云社区<新一代云原生可观测平台之CCE服务日志和告警篇>,作者:云容器大未来. 告警和日志是运维人员快速定位问题.恢复异常的主要手段.运维人员日常的工作模式往往是先接收告警信 ...
- Hadoop中mapreduce作业日志是如何生成的
摘要:本篇博客介绍了hadoop中mapreduce类型的作业日志是如何生成的.主要介绍日志生成的几个关键过程,不涉及过多细节性的内容. 本文分享自华为云社区<hadoop中mapreduce作 ...
- 互联网公司Python高性能编程
虽然Python一直被吐槽执行速度慢,但是架不住简洁的语法和丰富的第三方库使其能够节省开发时间.众所周知在互联网公司中要求频繁的迭代.快速的上线,而Python的优点就特别适合这种需求,所以Pytho ...
- ChatExcel?
大家好,我是章北海mlpy 最近在浅学LangChain,在大模型时代,感觉这玩意很有前途. LangChain是一个开源的应用开发框架,目前支持Python和TypeScript两种编程语言. 它赋 ...
- 【Vue】表单数据双向绑定 vue生命周期 fetch和axios发送请求 Vue全局组件
目录 昨日回顾 表单数据双向绑定(重要) checkbox单选 --- 布尔值 checkbox多选 --- 数组 radio单选 --- 字符串 给后端发送数据 购物车案例 全选按钮 商品添加删除 ...
- LVM----从CentOS7默认安装的/home中转移空间到根目录/(转载)
本文转载地址:https://www.cnblogs.com/user-sunli/p/15484345.html LVM----从CentOS7默认安装的/home中转移空间到根目录/ 一.基础概念 ...
- JSP | 指令详解以及实例
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本篇学习自:C语言中文网,部分内容转载仅供学习使用. 前文 JSP 中有一个关键的知识点:指令; ...
- 4.0 《数据库系统概论》数据库安全性详解---(存取控制、DAC&MAC、视图机制、审计Audit....)
前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...