自己編寫腳本啓動hadoop各個守護進程需要的特別配置

腳本啓動zookeeper集羣需要的特別配置

我寫了一個啓動zookeeper的腳本d.sh。啓動時提示成功了不了,但實際上沒有成功
腳本:
腳本很簡單內容如下:
[root@crxy1 local]# more d.sh 
#!/bin/sh 

echo "start zkServer..." 
for i in 1 2 3 
do 
ssh crxy$i "/usr/local/zookeeper/bin/zkServer.sh start" 
done 


 
jps查看進程
[root@crxy1 local]# jps 
3347 Jps
沒有QuorumPeerMain 進程,實際沒有啓動成功
如果手工執行,/usr/local/zookeeper/bin/zkServer.sh start
會真正成功啓動,jps有QuorumPeerMain進程:
 
[root@crxy1 local]# jps 
3376 QuorumPeerMain 
3394 Jps
 
這是個怎麼回事呢?
------------------------------------------------
原因:
首先需要知道 交互式shell和非交互式shell、登錄shell和非登錄shell是有區別的
在登錄shell裏,環境信息需要讀取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按順序最先的一個,並執行其中的命令。除非被 --noprofile選項禁止了;
在非登錄shell裏,環境信息只讀取 /etc/bash.bashrc和~/.bashrc
手工執行是屬於登陸shell,腳本執行數據非登陸shell,而我的linux環境配置中只對/etc/profile進行了jdk1.7等環境的配置,所以腳本執行/usr/local/zookeeper/bin/zkServer.sh start 啓動zookeeper失敗了
 
 
解決方法(下面3個方法任選1):
1、腳本代碼中添加“source /etc/profile;” 改爲:ssh crxy$i "source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start" 
2、把profile的配置信息echo到.bashrc中  echo 'source /etc/profile' >> ~/.bashrc
3、在/zookeeper/bin/zkEnv.sh的中開始位置添加 export JAVA_HOME=/usr/local/jdk1.7.0_45(就像hadoop中對hadoop-env.sh的配置一樣)
 解決了這個問題,就以方便的通過腳本實現hadoop集羣的啓動與關閉了,避免了繁瑣的手工操作^-^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章