Shell程式設計基礎 03 一鍵關閉和開啟程序服務

2021-10-10 20:37:46 字數 4655 閱讀 2463

未完待續。

關閉服務程序**

#針對要關閉的服務,定義乙個陣列,陣列結構可以分為三段:

開頭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...