当前位置: 首页 > Linux

Elasticsearch自动重启脚本也适用于其他应用

时间:2023-04-06 23:40:43 Linux

根据产品需求,我来写一个es的自动重启脚本。如果es挂了,需要在几分钟内重启。当时我的心都碎了,像我这样的linux只会写cd和ls脚本。我别无选择,只能去谷歌。我是边看边改的。没想到会写。鸡。es自动重启,首先要知道es是如何启动的,下载、配置、启动,这里略过。只看剧本。创建脚本首先创建一个sh文件,es_monitor.sh,内容很简单,判断es进程是否存在,存在则重启。#!/bin/bashcd`dirname$0`BIN_DIR=`pwd`#jdk路径,这里有个坑,下面会讲exportJAVA_HOME=/home/pangu/soft/jdk1.8.0_111#获取es进程ID,我的es目录是/home/pangu/app/elastic/elasticsearch-masterES_ID=`ps-ef|grepelasticsearch|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.logMonitor(){if[[$ES_ID]];then#这里判断ES进程是否存在echo"[info]当前ES进程ID为:$ES_ID"elseecho"[error]ES进程不存在!ES开始自动重启..."sh$StartES-dfi}Monitor>>$ESMonitorLogcrontab定时任务crond是Linux下用来周期性执行某些任务或等待某些事件处理的守护进程。在当前用户(pangu)的crontab-e下,把下面的内容放进去,保存,路径是你自己脚本的路径,一分钟检查一次。ps:es默认不能root启动,这里说的用户都是盘古。*/1****/bin/sh/home/pangu/app/elastic/es-monitor/es_monitor.sh遇到问题:过程中遇到问题,./bin/elasticsearch-d直接启动es是是的,也可以直接运行es_monitor.sh。如果es进程被kill掉了,会启动,但是和crontab就不行了,一直报找不到JAVA_HOME的问题。找不到任何可执行的java二进制文件。请在PATH中安装java或设置JAVA_HOME,盘古用户的.bash_profile配置Java环境变量,表示很无语,骂傻子,说这是最基本的东西。原来我在盘古用户下配置的.bash_profileJava环境变量在cron下没有生效。上网查了一下,发现很多人都被这个环境变量给骗了。crontab会以用户身份执行配置的命令,但不会加载用户的环境变量。这可以通过交互式和非交互式shell来解释。.bash_profile是交互式的,以login的形式进入bash运行。什么是交互模式?也就是说,shell等待您的输入并立即执行您提交的命令。这种模式称为交互式,因为shell与用户交互。大多数用户也非常熟悉这种模式:登录,执行一些命令,注销。当您注销时,shell也会终止。它不是交互模式,而是以shell脚本(非交互)模式执行。在这种模式下,shell不与你交互,而是读取存储在文件中的命令并执行它们。当它读取到文件末尾时,shell终止。可以看出我们的crontab处于非交互模式。这样我就明白了,看来要好好学习Linux了,噗噗噗。