由于分布式系统的流行,服务器上面部署的项目都是多实例的。而我又希望有一个功能,当服务器出现异常情况能够自动重启实例。

所以我想到了使用shell脚本监控实例进程id,如果不存在的话,就重启对应的实例。

一、轮询监控实现:

1. 使用crontab,缺点一分钟轮询一次

2. 使用shell死循环进行轮询

参考:https://blog.csdn.net/u011261430/article/details/72921991

由于我们系统使用人数比较少,所以我选择crontab进行轮询

二、环境变量问题:

crontab中的环境变量默认不会将我们自行定义的环境变量载入进来,所以执行脚本的时候,需要执行source命令

source /etc/profile

三、日志输出

对于轮询失败的次数和时间需要进行统计,保证能够查询到,所以我们要将日志重定向到一个固定的目录,定时清理

*/ * * * * /app/crontab/monitor.sh >> /app/crontab/kafka.log

四、代码实例:

crontab -e:将对应日志写入到文件中,方便后期查询失败的情况

*/ * * * * /app/crontab/monitor.sh >> /app/crontab/kafka.log

文件目录结构:

├── app
│   ├── crontab
│   ├── kafka.log
│   ├── monitor.sh

monitor.sh

记得必须先赋权

chmod  monitor.sh

具体代码

#!/bin/sh
# 默认shell执行需要的内容 # 环境变量重新生效
source /etc/profile # 判断进程是否存在,记得使用grep -v 排除gerp进程
retDesc=`ps -ef | grep "kafka.Kafka /app/kafka/config/server.properties" | grep -v grep`
retCode=$?
# 判断是否不为0,不为0就重新启动服务器,为0就说明服务器存在
if [ ${retCode} -ne ]; then
# invoke aliyun mobile push sms
echo $(date +%F%n%T)
echo "server down restart..."
/app/kafka/bin/kafka-server-start.sh -daemon /app/kafka/config/server.properties >> /dev/null >&
else
echo "server on"
fi

五、其他

linux中如果需要显示树形目录结构,安装tree库即可

cron日志:tailf /var/log/cron

linux中的标准输入和输出,也就是控制台的输入和输出:https://blog.csdn.net/cjfeii/article/details/10084343

linux中有一个输入时空设备/dev/null 输出到这边的东西是不会占用内存的 > 新文件 >> 附加 2>&1 程序输出和错误输出都走这个输出

赋权命令:chmod 777 *.sh

linux快熟清空文件的三种方法:

echo "" > test.txt(文件大小被截为1字节)
> test.txt(文件大小被截为0字节)
cat/dev/null > test.txt(文件大小被截为0字节)

路径问题:最好脚本中都使用全路径,避免路径引发的问题。

【运维技术】shell脚本实现线程挂掉,自动重启功能的更多相关文章

  1. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

  2. linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  3. 转 如何不耍流氓的做运维之——SHELL脚本

    家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写 SHELL 脚本如何能够不耍流氓. 下面的案例,我们以 MySQL 数据库备份 SHELL 脚本的案例来进行阐述. 不记录 ...

  4. 如何不耍流氓的做运维之-SHELL脚本

    前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓. 下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述: 不记录日志 ...

  5. Linux运维之shell脚本进阶篇

    一.if语句的使用 1)语法规则 if [条件] then 指令 fi 或 if [条件];then 指令 fi 提示:分号相当于命令换行,上面两种语法等同特殊写法:if[ -f"$file ...

  6. Linux运维之shell脚本

    一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...

  7. Linux运维之shell脚本基础知识

    1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...

  8. 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)

    一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...

  9. 运维常用shell脚本之日志清理

    1.创建一个日志清理脚本 #/bin/bash for i in `find /root/.pm2/logs -name "*.log"` do cat /dev/null > ...

随机推荐

  1. 我们复习.Net的这些日子里

    今天是我们复习前面学习的第三天,也是在今天我们结束了复习.之前上学时间感觉知识全是生僻的,在生活中很少用到,因此喜欢重复的记忆,而现在学习的知识全是现在乃至未来,将是每天我们使用的,所以就感觉没必要重 ...

  2. setTimeOut一些注意的地方

    for (var i = 0; i < data.length; i++) { var flashID = data[i].ID; //setTimeOut(removeFlashDiv(fla ...

  3. MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用

    * 使用 Java 为 MQ Telemetry Transport 创建订户 * 在此任务中,您将遵循教程来创建订户应用程序.订户将针对主题创建预订并接收该预订的发布. * 提供了一个示例订户应用程 ...

  4. Redis单机主从高可用性优化

    版权声明:本文由陈龙原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/127 来源:腾云阁 https://www.qclou ...

  5. kerberos认证协议分析

    Kerberos认证协议分析 Kerberos认证协议流程 如上图: * 第一步:client和认证服务器(AS)通信完成认证过程,如果认证成功AS返回给client一个TGT(用来向TGS获取tic ...

  6. 高中生的IT之路-1.2离开校园

    记得那是07年夏季的一天,高考成绩出来之后,班主任老师通知大家回学校报考志愿. 那天我刚到学校会议室,我还没来得及和同学见面就被班主任喊过去了,把志愿表递给我了我,我当时连仔细看那张志愿表都没看,随手 ...

  7. [SQL] 获取 Microsoft SQL Server 2008 的数据表结构

    then d.name else '' end , 表说明 then isnull(f.value,'') else '' end , 字段序号 = a.colorder , 字段名 = a.name ...

  8. java如何计算两个日期之间相差多少天?

    java如何计算两个日期之间相差多少天? public static void main(String [] args) { Date now = new Date(); Calendar cal = ...

  9. map容器结构体离散化

    小数坐标离散化: #include"string.h" #include"stdio.h" #include"iostream" #incl ...

  10. 170629、springboot编程之Druid数据源和监控配置二

    上篇是一种配置方式,虽然我们创建了servlet.filter但是没有任务编码,看着是不是很不爽.ok,接下来说一下简介的配置方式,使用代码注册Servlet,也是我个人比较推荐的! 1.创建Drui ...