【运维技术】shell脚本实现线程挂掉,自动重启功能
由于分布式系统的流行,服务器上面部署的项目都是多实例的。而我又希望有一个功能,当服务器出现异常情况能够自动重启实例。
所以我想到了使用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脚本实现线程挂掉,自动重启功能的更多相关文章
- CentOS 下运维自动化 Shell 脚本之 expect
CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...
- linux运维自动化shell脚本小工具
linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...
- 转 如何不耍流氓的做运维之——SHELL脚本
家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写 SHELL 脚本如何能够不耍流氓. 下面的案例,我们以 MySQL 数据库备份 SHELL 脚本的案例来进行阐述. 不记录 ...
- 如何不耍流氓的做运维之-SHELL脚本
前言 大家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓. 下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述: 不记录日志 ...
- Linux运维之shell脚本进阶篇
一.if语句的使用 1)语法规则 if [条件] then 指令 fi 或 if [条件];then 指令 fi 提示:分号相当于命令换行,上面两种语法等同特殊写法:if[ -f"$file ...
- Linux运维之shell脚本
一.bash漏洞 1)bash漏洞 bash漏洞是控制Linux计算机命令提示符的软件中存在的漏洞. bash是一个为GNU计划编写的Unix shell.它的名字是一系列缩写:Bourne-Agai ...
- Linux运维之shell脚本基础知识
1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...
- 运维常用shell脚本一(系统指标巡检、自动创建用户、跳板机)
一.系统指标巡检脚本 #!/bin/bash menu(){ cat <<EOF +---------------------------------------------+ | 日常巡 ...
- 运维常用shell脚本之日志清理
1.创建一个日志清理脚本 #/bin/bash for i in `find /root/.pm2/logs -name "*.log"` do cat /dev/null > ...
随机推荐
- HTML和CSS的精华
今天又是周一喽,我们开始啦又一周的学习啦,想一想,在这里学习已经一个月啦,不知什么时间已经习惯啦这种生活,我应该是一个很难适应环境的人啊,但是现在在这里感觉还可以哦,可能是来到这里有自己的目标吧,所以 ...
- iOS开发:iOS中图片与视频一次性多选 - v2m
一.使用系统的Assets Library Framework这个是用来访问Photos程序中的图片和视频的库.其中几个类解释如下 ALAsset ->包含一个图片或视频的各种信息 ALAsse ...
- JS中保留小数位数
一.1.2.toFixed(2)
- poj_2441 状态压缩dp
题目大意 N头牛,M个谷仓,每个牛c都有它喜欢的若干个谷仓,现在要将这N头牛安排进谷仓,使得每个牛都位于它喜欢的谷仓,而每个谷仓只能有一头牛.求安排的方案总数.N, M <= 20 题目分析 将 ...
- Delphi 单元
单元(unit)是组成Pascal程序的单独的源代码模块,单元有函数和过程组成,这些函数和过程能被主程序调用.一个单元至少要有unit语句,interface,和implementation三部分,也 ...
- mac必装工具以及mac使用介绍
必装工具 Scroll Reverserhttp://pilotmoon.com/scrollreverser/:一款可以使得鼠标使用方式和windows系统一致的软件 编程工具 ,,,,, 常用快捷 ...
- 磁盘 I/O 性能监控的指标
指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...
- CSRF攻击详解(转)
原文:http://www.django-china.cn/topic/580/ 一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称 ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
- golang 复制对象的正确做法
需求 实际运用种,传参是一对象指针,现在如何最简便地复制一对象? 实现 坑:&* 先拿到值再指针? package main import ( "time" " ...