摘要:自動(dòng)重啟,首先要知道是怎么啟的,下載,配置,啟動(dòng),這里就略過(guò)了。當(dāng)前用戶下把下面這個(gè)放進(jìn)去,保存,路徑是自己腳本的路徑,一分鐘檢測(cè)一次。默認(rèn)不能用啟動(dòng),這里所說(shuō)用戶都是。這種模式被稱作交互式是因?yàn)榕c用戶進(jìn)行交互。當(dāng)你簽退后,也終止了。
應(yīng)產(chǎn)品要求,讓寫(xiě)個(gè)es的自動(dòng)重啟的腳本,如果es掛了,要在分分鐘之內(nèi)重啟,當(dāng)時(shí)我的內(nèi)心是崩潰的,像我這種Linux只會(huì)cd、 ls 的哪會(huì)寫(xiě)什么腳本啊,無(wú)奈,只能去谷歌了,邊看邊改,沒(méi)想到還真給寫(xiě)出來(lái)了,貌似還不難,是不是有什么漏洞我就母雞了。
es自動(dòng)重啟,首先要知道es是怎么啟的,下載,配置,啟動(dòng),這里就略過(guò)了。直接看腳本吧。
創(chuàng)建腳本首先創(chuàng)建個(gè)sh文件,es_monitor.sh,內(nèi)容很簡(jiǎn)單,判斷es進(jìn)程是否存在,存在就算了,不存在就重啟。
#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` # jdk路徑,這里有個(gè)坑,下文會(huì)講 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}"` #啟動(dòng)腳本目錄 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開(kāi)始自動(dòng)重啟..." sh $StartES -d fi } Monitor>>$ESMonitorLogcrontab 定時(shí)任務(wù)
crond 是 Linux 下用來(lái)周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程。
當(dāng)前用戶(pangu)下crontab -e,把下面這個(gè)放進(jìn)去,保存,路徑是自己腳本的路徑,一分鐘檢測(cè)一次。ps: es默認(rèn)不能用root啟動(dòng),這里所說(shuō)用戶都是pangu。
*/1 * * * * /bin/sh /home/pangu/app/elastic/es-monitor/es_monitor.sh遇到的問(wèn)題:
過(guò)程中遇到了一個(gè)問(wèn)題,./bin/elasticsearch -d直接啟動(dòng)es是可以的 ,直接運(yùn)行es_monitor.sh 也是可以的,如果es進(jìn)程被殺死,是會(huì)啟動(dòng)的,但是用crontab怎么都不行,一直報(bào) JAVA_HOME 找不到的問(wèn)題。
Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME
而 pangu 用戶的.bash_profile里面是配的有 Java環(huán)境變量的啊,想不通就去求助Linux大神旭哥了,旭哥看到后,表示很無(wú)語(yǔ),罵了一句傻逼,說(shuō)這都是最基礎(chǔ)的東西。原來(lái)我配置在 pangu 用戶下的.bash_profile Java環(huán)境變量在 cron 下是不生效的,去網(wǎng)上查了一下,發(fā)現(xiàn)好多人都被這個(gè)環(huán)境變量的問(wèn)題坑過(guò),crontab會(huì)以用戶的身份執(zhí)行配置的命令,但是不會(huì)加載用戶的環(huán)境變量。這個(gè)可以用交互、非交互shell來(lái)解釋,.bash_profile是交互的,以login的方式進(jìn)入bash運(yùn)行的。什么是交互式模式呢?就是shell等待你的輸入,并且立即執(zhí)行你提交的命令。這種模式被稱作交互式是因?yàn)閟hell與用戶進(jìn)行交互。這種模式也是大多數(shù)用戶非常熟悉的:登錄、執(zhí)行一些命令、簽退。當(dāng)你簽退后,shell也終止了。而非交互式模式,是以shell script(非交互)方式執(zhí)行的,在這種模式下,shell不與你進(jìn)行交互,而是讀取存放在文件中的命令,并且執(zhí)行它們,當(dāng)它讀到文件的結(jié)尾,shell也就終止了??梢?jiàn)我們的crontab是非交互的模式。這樣就懂了吧,看來(lái)要好好學(xué)學(xué)Linux了,噗噗噗。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67457.html
閱讀 3202·2021-11-23 09:51
閱讀 2052·2021-09-09 09:32
閱讀 1138·2019-08-30 15:53
閱讀 3025·2019-08-30 11:19
閱讀 2543·2019-08-29 14:15
閱讀 1502·2019-08-29 13:52
閱讀 601·2019-08-29 12:46
閱讀 2886·2019-08-26 12:18