1. 程式人生 > >Elasticsearch 自動重啟指令碼,同樣適用於其他應用

Elasticsearch 自動重啟指令碼,同樣適用於其他應用

應產品要求,讓寫個es的自動重啟的指令碼,如果es掛了,要在分分鐘之內重啟,當時我的內心是崩潰的,像我這種Linux只會cdls 的哪會寫什麼指令碼啊,無奈,只能去谷歌了,邊看邊改,沒想到還真給寫出來了,貌似還不難,是不是有什麼漏洞我就母雞了。

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了,噗噗噗。

如果覺得內容還不錯,可以關注一下我哦
微信公眾號:志哥 (ID: zhige-me)
期待與你相遇,一同成長前行!
微信公眾號:志哥 (ID: zhige-me)