#!/bin/sh
echo "#######################"
echo "###"
echo "## 這是storm的一鍵啟動腳本"
echo "##"
echo "########################"
##首先啟動目前機器,即master上的storm程序: nimbus 和 ui [core]
echo "啟動master上的nimbus"
nohup /opt/storm/bin/storm nimbus > /dev/null >& &
echo "啟動master上的ui"
## master的ui
nohup /opt/storm/bin/storm ui > /dev/null >& &
##接下來就要啟動slave01和slave02上的程序
## 首先,需要知道storm叢集的其他節點,可以将其他節點的位址或者ip或者host配置到一個檔案中[storm-slaves],
##類似hadoop中的slaves檔案,hbase中的regionservers檔案
## 其次,需要周遊讀取storm-slaves中的host,一次來遠端ssh啟動其它機器上的程序
## 使用while循環對去到storm-slaves中的資料
## cat storm-slaves | while read host
## do
## echo $host
## 拿到host之後,就可以通過ssh來遠端執行相關的啟動腳本
## eg.ssh [email protected] nohup /opt/storm/bin/storm nimbus > /dev/null 2>&1
## eg.ssh [email protected] nohup /opt/storm/bin/storm supervisor > /dev/null 2>&1
## eg.ssh [email protected] nohup /opt/storm/bin/storm logviewer > /dev/null 2>&1
## 問題的關鍵在于slave01和slave02上面啟動的程序不一緻,是以需要使用if判斷來加以區分
## 是以我們可以通過目前的host是否為slave01來進行差別啟動,
## 如果是slave01,需要額外啟動nimbus程序
## 判斷host==> echo $host | grep -q "slave01",如果host包含slave01的話,這條指令的執行結果傳回碼為0,反之為非0
## if [ $? -eq 0 ]
## then
## 在slave01上啟動nimbus即可
## fi
## 再來啟動其它程序即可
## done
##
##
cat /opt/storm/bin/storm-slaves | while read host
do
echo $host | grep -q "slave01"
if [$ -eq ]
then
echo "啟動slave01上的nimbus"
ssh "[email protected]"$host nohup /opt/storm/bin/storm nimbus >/dev/null >& &
fi
echo "啟動supervisor 和 logviewer"
ssh "[email protected]"$host nohup /opt/storm/bin/storm supervisor > /dev/null >& &
ssh "[email protected]"$host nohup /opt/storm/bin/storm logviewer > /dev/null >& &
done