我在ubuntu 12.04裡想啟動一個java程式,sudo java -jar xxx.jar,但是結果提示sudo:java:command not found。
Ubuntu下用sudo運行java程式時,要注意此時使用者目錄為/root,而不是/home/yourname之類的。如果沒注意到這一點,就可能會遇到這樣一種情況:某個java相關的組件把某些配置預設放在/home/yourname,而你用sudo啟動的java程式卻又去/root下找這個檔案,結果沒找到; 而如果相關的模組又不報錯或者不夠高調的報錯,你就很難發現錯在哪裡。
這種情況一般是因為你的root使用者下沒有配置java的路徑,sudo的環境變數和普通使用者的環境變數不一樣。sudo的環境變數時整合的root使用者的,sudo對應的PATH變數一般是:/sbin:/usr/sbin:/bin:/usr/bin。
可以使用sudo `which java` -jar XX.jar試試。
另外,換一種jdk的配置方法也是可以解決這個問題的。 之前修改的/etc/profile的配置,後來改的是/etc/environment(注意在/etc/environment中不要export PATH=...,不然會出現卡在登陸介面的情況)。配置完/etc/environment後source /etc/environment,sudo java就可以執行了。
附註:
(1)/etc/environment是設定整個系統的環境,而/etc/profile是設定所有使用者的環境,前者與登陸使用者無關,後者與登陸使用者有關。系統應用程式的執行與使用者環境可以是無關的,但與系統內容時相關的,所以當你登陸時,你看到的提示資訊,如日期、時間資訊的顯示格式與系統內容的LANG是相關的,預設LANG=en_US,如果系統內容LANG-zh_CN,則提示資訊是中文的,否則是英文的。
(2)登陸系統時shell讀取的順序應該是/etc/profile -> /etc/environment -> $HOME/.profile -> $HOME/.env。
(3)如果同一個變數在使用者環境(/etc/profile)和系統內容(/etc/environment)有不同的值那應該以使用者環境為準。