sudo和用su切換至root用戶運行命令的區別

我碰到了這樣一個問題,在運行一個國產的java應用服務器軟件啓動一個java web服務器時,用su進入root用戶可以正常啓動服務,但是用sudo不能正常啓動,將啓動的腳本加到rc.local中也不能正常啓動,百思不得騎姐,後來想是不是因爲環境的問題。

我懷疑用su切換至root用戶後會初始化一些特殊的環境,但是用sudo運行程序的時候沒有經過此種類型的初始化,後來用sudo env和su 完全登錄root用戶後運行env看了一下環境變量的設置,確信了這一點。原來是用sudo運行命令的時候很多環境變量都沒有 export 出來,包括我的應用服務器軟件所必需的JAVA_HOME等JAVA相關的環境變量,系統配置這些環境變量是在系統的/etc/bashrc裏初始化的,需要登錄bash才能夠完成。當然直接在rc.local裏運行的程序也是不會初始化這些環境變量的。

因此,用sudo和su進入root用戶運行程序的一個最大的區別是:su切換至root用戶會提供一個完全登錄的SHELL環境,而sudo運行命令只會有一些缺省的環境設置,而一些與SHELL相關的環境設置是不會被初始化的。這在運行java服務器等軟件的時候尤其要注意。

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