Elasticsearch?自動重啟腳本創(chuàng)建實現(xiàn)
產(chǎn)品需求
應(yīng)產(chǎn)品要求,讓寫個es的自動重啟的腳本,如果es掛了,要在分分鐘之內(nèi)重啟,當(dāng)時我的內(nèi)心是崩潰的,像我這種Linux只會cd
、 ls
的哪會寫什么腳本啊,無奈,只能去谷歌了,邊看邊改,沒想到還真給寫出來了,貌似還不難,是不是有什么漏洞我就母雞了。
es自動重啟,首先要知道es是怎么啟的,下載,配置,啟動,這里就略過了。直接看腳本吧。
創(chuàng)建腳本
首先創(chuàng)建個sh文件,es_monitor.sh
,內(nèi)容很簡單,判斷es進(jìn)程是否存在,存在就算了,不存在就重啟。
#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` # jdk路徑,這里有個坑,下文會講 export JAVA_HOME=/home/pangu/soft/jdk1.8.0_111 # 獲取es進(jìn)程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進(jìn)程是否存在 echo "[info]當(dāng)前ES進(jìn)程ID為:$ES_ID" else echo "[error]ES進(jìn)程不存在!ES開始自動重啟..." sh $StartES -d fi } Monitor>>$ESMonitorLog
crontab 定時任務(wù)
crond 是 Linux 下用來周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個守護(hù)進(jìn)程。
當(dāng)前用戶(pangu)下crontab -e
,把下面這個放進(jìn)去,保存,路徑是自己腳本的路徑,一分鐘檢測一次。ps: es默認(rèn)不能用root啟動,這里所說用戶都是pangu。
*/1 * * * * /bin/sh /home/pangu/app/elastic/es-monitor/es_monitor.sh
遇到的問題
過程中遇到了一個問題,./bin/elasticsearch -d
直接啟動es是可以的 ,直接運行es_monitor.sh
也是可以的,如果es進(jìn)程被殺死,是會啟動的,但是用crontab怎么都不行,一直報 JAVA_HOME 找不到的問題。
Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME
而 pangu 用戶的.bash_profile
里面是配的有 Java環(huán)境變量的啊,想不通就去求助Linux大神旭哥了,旭哥看到后,表示很無語,罵了一句傻逼,說這都是最基礎(chǔ)的東西。原來我配置在 pangu 用戶下的.bash_profile
Java環(huán)境變量在 cron 下是不生效的,去網(wǎng)上查了一下,發(fā)現(xiàn)好多人都被這個環(huán)境變量的問題坑過,crontab會以用戶的身份執(zhí)行配置的命令,但是不會加載用戶的環(huán)境變量。這個可以用交互、非交互shell來解釋,.bash_profile
是交互的,以login的方式進(jìn)入bash運行的。
什么是交互式模式呢?就是shell等待你的輸入,并且立即執(zhí)行你提交的命令。這種模式被稱作交互式是因為shell與用戶進(jìn)行交互。這種模式也是大多數(shù)用戶非常熟悉的:登錄、執(zhí)行一些命令、簽退。當(dāng)你簽退后,shell也終止了。而非交互式模式,是以shell script(非交互)方式執(zhí)行的,在這種模式下,shell不與你進(jìn)行交互,而是讀取存放在文件中的命令,并且執(zhí)行它們,當(dāng)它讀到文件的結(jié)尾,shell也就終止了??梢娢覀兊腸rontab是非交互的模式。這樣就懂了吧,看來要好好學(xué)學(xué)Linux了,噗噗噗。
以上就是Elasticsearch 自動重啟腳本實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Elasticsearch 重啟腳本的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法
本篇文章主要介紹了JAVA 根據(jù)設(shè)置的概率生成隨機數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08mybatisplus報錯:Invalid bound statement(not fou
文章主要介紹了在使用MyBatis-Plus時遇到的`Invalid bound statement (not found)`錯誤的幾種常見原因和解決方法,包括namespace路徑不一致、函數(shù)名或標(biāo)簽id不一致、構(gòu)建未成功、掃包配置錯誤以及配置文件書寫錯誤2025-02-02spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實現(xiàn)定時任務(wù)
這篇文章主要介紹了spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實現(xiàn)定時任務(wù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06實例解決Java異常之OutOfMemoryError的問題
在本篇文章中,我們給大家分享了關(guān)于解決Java異常之OutOfMemoryError的問題的方法,有此需要的朋友們學(xué)習(xí)下。2019-02-02SpringCloud Alibaba使用Seata處理分布式事務(wù)的技巧
在傳統(tǒng)的單體項目中,我們使用@Transactional注解就能實現(xiàn)基本的ACID事務(wù)了,隨著微服務(wù)架構(gòu)的引入,需要對數(shù)據(jù)庫進(jìn)行分庫分表,每個服務(wù)擁有自己的數(shù)據(jù)庫,這樣傳統(tǒng)的事務(wù)就不起作用了,那么我們?nèi)绾伪WC多個服務(wù)中數(shù)據(jù)的一致性呢?跟隨小編一起通過本文了解下吧2021-06-06