操作系統:centos 5.2
場景描述:
我們有一個WEB工程,客戶要求使用普通用戶(例如chb)運行,然后在頁面上有個按鈕,點擊之后可以關機
實現方式:
1. JAVA代碼:
3.設置開機自動啟動tomcat,修改/etc/rc.d/rc.local,在末尾增加如下:
su chb -c "/opt/tomcat/bin/startup.sh"
問題描述:
每次開機自動啟動的java進程,頁面上的關機按鈕都無法實現關機功能,但是此時如果以chb賬號通過ssh登錄該服務器,手動殺掉tomcat進程,然后再重新啟動tomcat,頁面上的關機按鈕就有效了。各位知道這是為什么嗎?是否和sudo加載順序有關?或者和chb用戶shell環境有關?
問題分析:
通過分析開機啟動的JAVA進程和手動啟動的JAVA進程,發現tty是不同的,接著再去google sudo和tty的關系,發現sudo默認是需要tty的,系統開機啟動,沒有tty,而我們通過ssh客戶端登錄服務器,殺掉tomcat,再重新啟動tomcat,這時候可以獲得tty為pts,因此可以使用sudo命令
解決方法:
通過修改/etc/sudoers文件,將
Defaults requiretty
注釋掉即可
新聞熱點
疑難解答