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

所以我想到了使用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. HTML和CSS的精华

    今天又是周一喽,我们开始啦又一周的学习啦,想一想,在这里学习已经一个月啦,不知什么时间已经习惯啦这种生活,我应该是一个很难适应环境的人啊,但是现在在这里感觉还可以哦,可能是来到这里有自己的目标吧,所以 ...

  2. iOS开发:iOS中图片与视频一次性多选 - v2m

    一.使用系统的Assets Library Framework这个是用来访问Photos程序中的图片和视频的库.其中几个类解释如下 ALAsset ->包含一个图片或视频的各种信息 ALAsse ...

  3. JS中保留小数位数

    一.1.2.toFixed(2)

  4. poj_2441 状态压缩dp

    题目大意 N头牛,M个谷仓,每个牛c都有它喜欢的若干个谷仓,现在要将这N头牛安排进谷仓,使得每个牛都位于它喜欢的谷仓,而每个谷仓只能有一头牛.求安排的方案总数.N, M <= 20 题目分析 将 ...

  5. Delphi 单元

    单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用.一个单元至少要有unit语句,interface,和implementation三部分,也 ...

  6. mac必装工具以及mac使用介绍

    必装工具 Scroll Reverserhttp://pilotmoon.com/scrollreverser/:一款可以使得鼠标使用方式和windows系统一致的软件 编程工具 ,,,,, 常用快捷 ...

  7. 磁盘 I/O 性能监控的指标

    指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...

  8. CSRF攻击详解(转)

    原文:http://www.django-china.cn/topic/580/ 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称 ...

  9. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  10. golang 复制对象的正确做法

    需求 实际运用种,传参是一对象指针,现在如何最简便地复制一对象? 实现 坑:&*  先拿到值再指针? package main import ( "time" " ...