未完待續。
關閉服務程序**
#針對要關閉的服務,定義乙個陣列,陣列結構可以分為三段:
開頭arr[0]:要關閉的程序簡稱
中間arr[1,size-2]:要關閉的程序在jps裡的名字
結尾arr[size-1]:要關閉的程序執行的操作命令
2020-11-25:開啟服務程序**
#!/bin/bash
hb="hbase hmaster hregionserver start-hbase.sh"
zk="zookeeper quorumpeermain zkserver.sh_start"
hv="hive runjar runjar nohup_hive_--service_?>~/hive2.log_2>&1_&"
yn="yarn nodemanager resourcemanager start-yarn.sh"
hd="dfs datanode secondarynamenode namenode start-dfs.sh"
function checkstart(
)` #7、篩選出當前程序裡的某個服務的所有的程序和程序號if[
"$v"
]#8、如果篩選到了
then
if[$1 == "hive"
]#9、hive的啟動命令不太一樣,單看;如果陣列的第一位是hive
then
v=($v)
#10、把篩選出來的程序名轉換為陣列(122 runjar,這個就算兩個元素)
count=$(
($/2)) #11、把篩選到的程序數量賦值給count
break
#12、跳出迴圈,hive的判斷結束
else
#13、如果不是hive,就沒有上面那麼麻煩了
((count++))
#14、篩選出乙個,count就加一位,迴圈結束後,count就是已經啟動的程序數量的值
fifi
done
if[$count
-eq$size
]#15、如果篩選出來的數量等於陣列的長度,也就是該開的服務都已經開啟了
then
echo
"start $1 successfully"
#16、就輸出成功
else
echo
"fail to start $1"
#17、否則啟動失敗
echo
"fail to execute start-all.sh ... please check the reason and retry again"
exit 1 #18、退出
fi}function
start()
#23、$#是陣列長度,$#-1是最後一位索引,此時的output就是開啟服務的命令
output="$"
#24、$是替換的意思,即把所有的下劃線替換為空格if[
[$output =~ ^nohup ]
]#25、如果output滿足開頭為nohup的條件,也就是hive的啟動命令
then
eval $
#26、eval執行兩次掃瞄,第一次替換變數,第二次執行,而倒引號只能裡面句子只能掃瞄一次。執行metastore服務
sleep 3s #27、執行完上一句,休息3s,避免和下一句併發,metastore和hiveserver2啟動順序不能錯
eval $
#28、執行hiveserver2服務,也用了$方法
sleep 10s #28、休眠10s
else
#如果不是hive服務
output=`$output` #30、直接執行陣列的末位元素,也就是啟動命令
ficheckstart $@ #31、呼叫checkstart函式檢查啟動的效果
}start
$hdstart
$ynstart
$hvstart
$zkstart
$hb
關閉服務程序
#!/bin/bash
hb="hbase hmaster hregionserver stop-hbase.sh"
zk="zookeeper quorumpeermain zkserver.sh_stop>~/zk.log_2>&1"
hv="hive runjar runjar kill"
yn="yarn nodemanager resourcemanager stop-yarn.sh"
hd="dfs datanode secondarynamenode namenode stop-dfs.sh"
function checkstop(
)` #6、執行jps命令,然後篩選陣列裡的內容(程序名)if[
"$v"
]#7、如果能篩選出來,這個if就繼續執行裡邊的**
then
((stop++))
#7、stop計數器自加,不等於0了
break
#8、跳出迴圈
fidone
if[$stop
-eq 0 ]
#9、判斷:如果stop等於0,說明程序裡已經沒有這個程序了
then
echo
"stop $1 successfully"
#10、輸出關閉成功
else
echo
"fail to stop $1"
#11、如果stop不等於0,說明還有程序沒關掉
fi}function stop(
)` #5、執行jps指令並依次曬選陣列裡的引數,如果沒匹配到的話v就是nullif[
"$v"
]#6、如果v不是null就執行下面的**
then
echo
"start to stop $1 ..."
#7、輸出要關閉誰的提示
output=$ #8、把執行**(陣列的最後一位,kill)賦值給output
((count++))
if[$output = "kill"
]#9、根據最後一位是kill判斷,如果是hive服務,執行下面的語句。
then #10、hive服務和其他命令不太一樣,需要kill相關的程序的程序號(runjar前面的數字)
pid=`jps|grep runjar|awk 'nr==1 '` #11、提取出程序號。awk後的nr==1代表第一行,也就是第乙個runjar,代表的是輸出第乙個引數,也就是程序號
output=`kill
-9 $pid` #12、執行kill -9的命令關閉runjar
else
#13、如果不是hive服務,執行下面的**
output="$"
#14、把output裡存在的空格通過正則替換為下劃線,要不然乙個元素會被當做兩個,主要針對zkserver.sh
output=`eval $output` #15、在倒引號裡執行命令,也就是關閉服務的命令
break
fifi
doneif[
$count
-eq 0 ]
#16、執行完上面的迴圈之後,理論上應該全部關閉了,最後檢查一下是否篩選到了服務程序名
then
echo
"no $1 to stop"
#17、count等於0,也就是沒有服務在執行,就輸出完成的提示命令
else
checkstop $@ #18、如果count不等於0,說明還有程序沒有被關掉,執行checkstop函式檢查是啥情況fi}
stop $hb
stop $zk
stop $hv
stop $yn
stop $hd
啟動和關閉的命令執行完之後,可以新建乙個指令碼,通過呼叫這個指令碼輸入引數執行上述的兩個指令碼
#!/bin/bash
p=($*
)#1、把輸入引數轉化為陣列p
l=$ #2、把陣列p的長度賦值給lif[
$l-eq 0 ]
#3、如果陣列p長度為0,也就是沒有輸入任何引數
then
./start
-all.sh #4、啟動所有服務
else
#5、如果輸入了引數,則做以下判斷if[
[$1 =~ ^start$|^stop$|^restart$ ]
]#如果輸入引數滿足:開頭結尾是start或stop或restart
then
if[[
$1 =~ ^stop|restart ]
]#進一步判斷,如果是stop或restart,就執行關閉命令
then
./stop-all.sh
fiif[[
$1 =~ ^start
|restart ]
]#如果是start或restart,就執行start命令
then
./start
-all.sh #如果是restart,則stop和start都會被執行一次
fielse
echo
"invalid arguement : $1"
#如果不滿足上面條件,就提示錯誤
exit 1
fifi
shell一鍵啟動與關閉
首先在home目錄下建立乙個shell指令碼目錄檔案mkdir shell file,然後進入到shell file目錄下建立乙個啟動指令碼touch start.sh,然後vi start.sh 進入編輯頁面,在第一行插入 bin bash儲存退出 關閉之前mysql的所有程序pkill mysq...
storm集群一鍵啟動關閉shell指令碼檔案
vi start storm cluster.sh 這裡面需要注意的是 hdp 1 hdp 2 hdp 3是我的三颱虛擬機器,如果名字不同需要修改 此指令碼必須放在storm bin方能生效 bin bash nimbus節點 nimbusservers hdp 1 hdp 2 supervisor...
C 一鍵關閉啟動服務,一鍵禁用服務
登錄檔操作 public class gf regreadwrite catch 設定路徑為keypath,鍵名為keyname的登錄檔鍵值為keyval static public bool setregval registrykey rootkey,string keypath,string k...