Elasticsearch 自动重启脚本创建实现

 更新时间:2023年08月09日 11:13:37   作者:志哥  
这篇文章主要为大家介绍了Elasticsearch 自动重启脚本创建实现详解分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

产品需求

应产品要求,让写个es的自动重启的脚本,如果es挂了,要在分分钟之内重启,当时我的内心是崩溃的,像我这种Linux只会cd、 ls 的哪会写什么脚本啊,无奈,只能去谷歌了,边看边改,没想到还真给写出来了,貌似还不难,是不是有什么漏洞我就母鸡了。

es自动重启,首先要知道es是怎么启的,下载,配置,启动,这里就略过了。直接看脚本吧。

创建脚本

首先创建个sh文件,es_monitor.sh,内容很简单,判断es进程是否存在,存在就算了,不存在就重启。

#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
# jdk路径,这里有个坑,下文会讲
export JAVA_HOME=/home/pangu/soft/jdk1.8.0_111
# 获取es进程ID,我的es目录是/home/pangu/app/elastic/elasticsearch-master
ES_ID=`ps -ef |grep elasticsearch |grep -w 'elasticsearch-master'|grep -v 'grep'|awk '{print $2}'`
#启动脚本目录
StartES=/home/pangu/app/elastic/elasticsearch-master/bin/elasticsearch
# 日志输出
ESMonitorLog=$BIN_DIR/es-master-monitor.log
Monitor()
{
  if [[ $ES_ID ]];then # 这里判断ES进程是否存在
    echo "[info]当前ES进程ID为:$ES_ID"
  else
    echo "[error]ES进程不存在!ES开始自动重启..."
    sh $StartES -d
  fi
}
Monitor>>$ESMonitorLog

crontab 定时任务

crond 是 Linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。

当前用户(pangu)下crontab -e,把下面这个放进去,保存,路径是自己脚本的路径,一分钟检测一次。ps: es默认不能用root启动,这里所说用户都是pangu。

*/1 * * * * /bin/sh /home/pangu/app/elastic/es-monitor/es_monitor.sh

遇到的问题

过程中遇到了一个问题,./bin/elasticsearch -d直接启动es是可以的 ,直接运行es_monitor.sh 也是可以的,如果es进程被杀死,是会启动的,但是用crontab怎么都不行,一直报 JAVA_HOME 找不到的问题。

Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME

而 pangu 用户的.bash_profile里面是配的有 Java环境变量的啊,想不通就去求助Linux大神旭哥了,旭哥看到后,表示很无语,骂了一句傻逼,说这都是最基础的东西。原来我配置在 pangu 用户下的.bash_profile Java环境变量在 cron 下是不生效的,去网上查了一下,发现好多人都被这个环境变量的问题坑过,crontab会以用户的身份执行配置的命令,但是不会加载用户的环境变量。这个可以用交互、非交互shell来解释,.bash_profile是交互的,以login的方式进入bash运行的。

什么是交互式模式呢?就是shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。而非交互式模式,是以shell script(非交互)方式执行的,在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们,当它读到文件的结尾,shell也就终止了。可见我们的crontab是非交互的模式。这样就懂了吧,看来要好好学学Linux了,噗噗噗。

以上就是Elasticsearch 自动重启脚本实现的详细内容,更多关于Elasticsearch 重启脚本的资料请关注脚本之家其它相关文章!

相关文章

  • Spring中的REST分页的实现代码

    Spring中的REST分页的实现代码

    本文将介绍在REST API中实现分页的基础知识。我们将专注于使用Spring Boot和Spring Data 在Spring MVC中构建REST分页,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • javax.validation.constraints如何校验参数合法性

    javax.validation.constraints如何校验参数合法性

    本文将深入探讨javax.validation.constraints的基本用法和高级应用,帮助读者更好地理解和运用这个强大的校验框架,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot中使用websocket出现404的解决方法

    SpringBoot中使用websocket出现404的解决方法

    在Springboot中使用websocket时,本地开发环境可以正常运行,但部署到服务器环境出现404问题,所以本文小编讲给大家详细介绍一下SpringBoot中使用websocket出现404的解决方法,需要的朋友可以参考下
    2023-09-09
  • Java利用for循环输出空心三角形、空心菱形和空心矩形的代码

    Java利用for循环输出空心三角形、空心菱形和空心矩形的代码

    今天小编就为大家分享一篇关于Java利用for循环输出空心三角形、空心菱形和空心矩形的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • JAVA下单接口优化实战TPS性能提高10倍

    JAVA下单接口优化实战TPS性能提高10倍

    今天小编就为大家分享一篇关于JAVA下单接口优化实战TPS性能提高10倍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • java.net.SocketException: Connection reset异常的几种原因分析和解决方法

    java.net.SocketException: Connection reset异常的几种原因分析和解决方法

    这篇文章主要介绍了java.net.SocketException: Connection reset异常的几种原因分析和解决方法,这个错误通常是由于连接被远程主机关闭导致的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • 深入了解Java ServletContext

    深入了解Java ServletContext

    这篇文章主要介绍了Java ServletContext的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • java正则表达式使用示例

    java正则表达式使用示例

    这篇文章主要介绍了java正则表达式使用示例,实现拆分字符串、替换字符串、判断字符串是否与制定模式匹配等功能,需要的朋友可以参考下
    2014-03-03
  • SpringBoot集成Redis之配置、序列化与持久化方式

    SpringBoot集成Redis之配置、序列化与持久化方式

    本文介绍了Redis的基本概念、常用数据类型及操作、SpringBoot整合Redis的方法、高级特性与安全性、性能优化、测试与部署、数据一致性及版本更新等内容,通过本文的学习,读者可以掌握Redis的使用方法,并在实际项目中发挥其优势
    2024-11-11
  • Java之Spring整合Junit

    Java之Spring整合Junit

    Java Spring框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力,本篇文章带你了解如何配置数据源、注解开发以及整合Junit
    2023-04-04

最新评论