Linux 监测服务心跳、服务重启策略


前言

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i


提示:以下是本篇文章正文内容,下面案例可供参考

背景

当服务假死情况下,导致服务不可用,一时间定位不到服务假死原因,可以采用临时应急方案,需要增加探测机制,定时拉起重启服务

一、curl服务可用验证

注:curl请求地址包含特殊字符时,需要将特殊字符转义,curl字符转义移步第四步

curl  http://127.0.0.1:8088/GetResult.json?userName=superAdmin%26password=sadmin_secret_pw -d '{"id":100897}'

首先,正常运行情况下,适用下述curl指令可以正常返回结果:
curl

二、服务探测脚本

编写shell脚本如下:

#!/bin/bash

#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#      + 1、此脚本为服务监控脚本,与系统定时任务配合使用    
#      + 2、执行crontab -e进入监控任务配置,配置探测脚本执行时间      
#      + 3、创建此脚本后请赋予可执行权限chmod +x chk_service.sh
#      + 4、普通用户执行docker需要sudo 权限,在执行命令前先设置普通用户密码 !!!          
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



#获取当前时间
DATE=`date +%Y%m%d`
#检测地址
httpCode=`curl -s -o /dev/null -w "%{http_code}" -X POST -d '{"id":100897}' "http://127.0.0.1:8088/GetResult.json?userName=superAdmin&password=sadmin_secret_pw"` 

#服务端口
ports=8088

#检查服务是否正常
function checkService()
{
echo "执行时间: $(date +%Y'-'%m'-'%d' '%H':'%M':'%S) "
if (( "$httpCode"=="200" ));then
        echo "*************************"
        echo "检测服务正常运行服务可用!"
		exit
else
        echo "*************************"
        echo "检测服务不可用!"
        echo "重启检测服务...预计两分钟"
        echo "admin123" | sudo -S docker restart 09a380a14b7f
        sleep 30s

		status=`netstat -nltp|grep ${ports}|grep -v "grep"`
		if [ -z "${status}" ];then
		  echo "docker检测服务重启失败..."
		  echo "再次重启docker检测服务..."
		  echo "admin123" | sudo -S docker restart 09a380a14b7f
		  exit
		else
		  echo "docker检测服务重启完成..." 
		  exit

		fi		
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记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现Linux上的进程自动关闭和自动重启,可以编写一个监测进程的脚本。 脚本的思路如下: 1. 首先,需要在Linux上安装inotify-tools软件包来监测文件或目录的状态变化。 2. 在脚本中使用inotifywait命令监测进程的状态文件或进程的关键日志文件。 3. 当进程关闭时,脚本会检测到相关文件发生了变化,并执行相应的操作,比如重启进程。 4. 可以使用while循环来不断监测文件状态的变化,实现持续的监测重启功能。 伪代码如下所示: ```shell # 设定监测的文件路径 file_to_monitor="/path/to/your/file" # 循环监测文件状态的变化 while true do # 使用inotifywait命令监测文件的状态变化 inotifywait -e modify $file_to_monitor # 文件状态变化时执行的操作 # 检测进程是否关闭,如果关闭就重启进程的命令 # restart_your_process_command done ``` 这个脚本可以根据具体的需求进行修改和扩展,比如添加邮件或者日志通知功能,或者对重启次数进行限制等。可以根据实际情况来优化脚本的策略和逻辑。 ### 回答2: 为了实现Linux进程的自动关闭和自动重启功能,可以编写一个脚本来监测指定进程的状态,并根据需要进行相应的操作。 首先,通过使用ps命令来获取当前进程的状态信息,可以使用以下命令获取指定进程的PID(进程ID): ``` pid=$(ps -ef | grep -v grep | grep "进程名" | awk '{print $2}') ``` 其中,将"进程名"替换为要监测的进程的名称。此命令使用grep筛选出与进程名匹配的行,再使用awk提取出PID。 接下来,可以使用kill命令来关闭指定进程,命令如下: ``` kill -9 $pid ``` 其中,$pid是上一步获取的进程的PID。-9参数表示强制终止进程。 为了实现自动重启功能,可以使用nohup命令来重新启动进程,命令如下: ``` nohup 进程名 & ``` 此命令使用nohup命令将进程以守护进程的方式运行,并且将输出重定向到nohup.out文件中。&符号表示在后台运行。 最后,将以上的命令封装成一个脚本,并在合适的时机执行该脚本即可实现对进程的监测、关闭和重启操作。 需要注意的是,脚本需要有足够的权限才能对进程进行操作,例如,root用户或者具有特定权限的用户。另外,根据具体情况,可能还需要设置定时任务或者监测进程状态的循环来实现持续的监测和操作。 ### 回答3: 为了实现Linux系统中进程的自动关闭和自动重启,可以编写一个脚本来实现这一功能。 首先,需要通过命令行或者脚本获取进程的PID(进程ID),可以使用命令`pgrep`或者`ps`搭配`grep`来实现。例如,使用`pgrep`命令查找进程名为"myprocess"的PID: ``` pid=$(pgrep myprocess) ``` 或者使用`ps`命令: ``` pid=$(ps -ef | grep myprocess | grep -v grep | awk '{print $2}') ``` 接下来,可以使用`kill`命令来关闭进程,例如: ``` kill $pid ``` 或者带有参数`-9`来强制关闭进程: ``` kill -9 $pid ``` 然后,在脚本中可以使用循环来检测进程是否关闭,可以使用`pgrep`命令或者检查进程是否存在于`/proc`目录下的方法。例如使用`pgrep`命令来判断进程是否存在: ``` while pgrep myprocess > /dev/null; do sleep 1 done ``` 或者检查进程是否存在于`/proc`目录下: ``` while [ -d "/proc/$pid" ]; do sleep 1 done ``` 最后,在循环结束后,可以使用脚本或者命令重启进程,例如: ``` ./myprocess.sh ``` 或者 ``` myprocess & ``` 综上所述,可以编写一个包含以上步骤的脚本,来实现Linux系统中进程的自动关闭和自动重启功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值