我在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)有不同的值那應該以用戶環境為准。