前言

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南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&amp;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 监测服务心跳、服务重启策略的更多相关文章

  1. [转帖]Linux监测某一时刻对外的IP连接情况

    Linux监测某一时刻对外的IP连接情况 https://blog.csdn.net/twt326/article/details/81454171 公司机器有病毒 需要分析一下. 之前有需要,在CS ...

  2. linux下的audit服务

    audit   ['ɔːdɪt]  审计 auditd是linux的一个审计服务. 这是man下的解释 auditd is the userspace component to the Linux A ...

  3. linux下的crontab服务

    linux下的crontab服务:1.crontab 是用来让使用者在固定时间或固定间隔执行程序之用在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现.以某一频率执行任务linux缺 ...

  4. 如何管理linux开机自启服务

    如何管理linux开机自启服务? 自启动服务非常重要,例如 (1)需要手动添加希望自启的服务,如安装svn后没有自动添加,就需要我们手动加入(2)安装某些程序后,自动加到自启动了,但我们不需要,需要手 ...

  5. linux下svn(subversion)服务端添加工程及配置权限

    linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...

  6. 如何在linux下开启FTP服务

    如何在linux下开启FTP服务 1. 首先服务器要安装ftp软件,查看是否已经安装ftp软件下:   #which vsftpd   如果看到有vsftpd的目录说明服务器已经安装了ftp软件 2. ...

  7. 【转帖】云平台发现服务构建:为什么不使用ZooKeeper

    http://www.chinacloud.cn/show.aspx?id=19979&cid=16 [日期:2015-04-29] 来源:dockerone   作者: [字体:大 中 小] ...

  8. linux 系统的ssh服务

    ssh服务由服务端软件Openssh和客户端(常见的有ssh,SecureCRT,putty,xshell)组成,ssh服务默认使用22端口提供服务,它有两个不兼容的ssh协议版本,分别是1.x和2. ...

  9. linux应用之vsftp服务的安装及配置(centos)

    1.centos中vsftp服务的安装 方法1:rpm方式 #rpm –ivh vsftpd-2.0.5-10.el5.i386.rpm  安装rpm程序包(网上下载的rpm包) 方法2:yum方式 ...

  10. Linux:定时任务crond服务

    一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...

随机推荐

  1. C# 在Word中添加Latex 数学公式和符号

    本篇内容介绍使用Spire.Doc for .NET在Word中添加Latex数学公式和符号的方法.编辑代码前,将Spire.Doc.dll文件添加引用至VS程序.dll文件包可通过官网下载导入(如果 ...

  2. 神经网络入门篇:深度学习和大脑的关联性(What does this have to do with the brain?)

    深度学习和大脑的关联性 开始讲故事(手动狗头) 深度学习和大脑有什么关联性吗? 关联不大. 那么为什么会说深度学习和大脑相关呢? 当你在实现一个神经网络的时候,那些公式是你在做的东西,你会做前向传播. ...

  3. 详解CCE服务:一站式告警配置和云原生日志视图

    本文分享自华为云社区<新一代云原生可观测平台之CCE服务日志和告警篇>,作者:云容器大未来. 告警和日志是运维人员快速定位问题.恢复异常的主要手段.运维人员日常的工作模式往往是先接收告警信 ...

  4. Hadoop中mapreduce作业日志是如何生成的

    摘要:本篇博客介绍了hadoop中mapreduce类型的作业日志是如何生成的.主要介绍日志生成的几个关键过程,不涉及过多细节性的内容. 本文分享自华为云社区<hadoop中mapreduce作 ...

  5. 互联网公司Python高性能编程

    虽然Python一直被吐槽执行速度慢,但是架不住简洁的语法和丰富的第三方库使其能够节省开发时间.众所周知在互联网公司中要求频繁的迭代.快速的上线,而Python的优点就特别适合这种需求,所以Pytho ...

  6. ChatExcel?

    大家好,我是章北海mlpy 最近在浅学LangChain,在大模型时代,感觉这玩意很有前途. LangChain是一个开源的应用开发框架,目前支持Python和TypeScript两种编程语言. 它赋 ...

  7. 【Vue】表单数据双向绑定 vue生命周期 fetch和axios发送请求 Vue全局组件

    目录 昨日回顾 表单数据双向绑定(重要) checkbox单选 --- 布尔值 checkbox多选 --- 数组 radio单选 --- 字符串 给后端发送数据 购物车案例 全选按钮 商品添加删除 ...

  8. LVM----从CentOS7默认安装的/home中转移空间到根目录/(转载)

    本文转载地址:https://www.cnblogs.com/user-sunli/p/15484345.html LVM----从CentOS7默认安装的/home中转移空间到根目录/ 一.基础概念 ...

  9. JSP | 指令详解以及实例

    原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本篇学习自:C语言中文网,部分内容转载仅供学习使用. 前文 JSP 中有一个关键的知识点:指令; ...

  10. 4.0 《数据库系统概论》数据库安全性详解---(存取控制、DAC&MAC、视图机制、审计Audit....)

    前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...