shell腳本執行jps時:-bash: jps: command not found

我構建了hadoop集羣。我們一定會寫一個shell腳本去每一個節點上去jps,查看每個節點的進程情況。

原先以爲shell很簡單:

#!/bin/bash
#查看每個節點運行情況
for((host=101;host<108;host++));do
echo -----------hadoop$host-------------
	ssh hadoop$host "jps"
done

這裏默認服務器節點的名字是hadoop101-hadoop107
默認已經配置了ssh_key的公鑰和私鑰
看是運行這段程序的時候會彈出一個錯誤:

-bash: jps: command not found

錯誤原因:
在shell腳本寫的ssh到其他節點的時候默認是不加載配置文件的。linux並不能去找到java中jps的命令。

  • 解決方案一:在ssh到其他節點的時候source 一下配置文件。
    具體操作爲:ssh hadoop$host “source /etc/profile;jps”
  • 解決方案二:在ssh到其他節點的時候輸入jps命令下的絕對路徑。
    在筆者的linux的jdk的絕對路徑爲:/opt/module/jdk1.8.0_144/bin這個目錄下就有jps的命令。
    具體操作爲:ssh hadoop$host “/opt/module/jdk1.8.0_144/bin/jps”
  • 解決方案三:在當前用戶的家目錄中輸入命令ll -a會顯示隱藏文件,修改配置文件.bashrc。
    .bashrc 是當你登入shell時執行
    在其中添加JDK的環境變量
  • 解決方案四:在/etc/profile.d目錄下創建一個以sh結尾的文件。將profile配的環境變量拷貝到這個文件目錄下

運行結果:

-----------hadoop101-------------
10720 DataNode
10993 NodeManager
10573 NameNode
19663 Jps
-----------hadoop102-------------
37744 Jps
31282 NodeManager
31154 ResourceManager
31036 DataNode
-----------hadoop103-------------
30725 NodeManager
30620 SecondaryNameNode
30511 DataNode
41135 Jps
-----------hadoop104-------------
30995 DataNode
31109 NodeManager
37483 Jps
-----------hadoop105-------------
30882 NodeManager
30766 DataNode
37358 Jps
-----------hadoop106-------------
8816 Jps
2592 NodeManager
2477 DataNode
-----------hadoop107-------------
37445 Jps
31035 DataNode
31151 NodeManager

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