一、方法
在/etc/rc.local寫程序的啟動命令(系統執行內核過程中會啟動init進程,該進程把當前runlevel所對應的的所有service 都啟動后,才會執行rc.local里的命令),程序默認以root身份啟動;也可以通過 sudo -u user1 命令 指定以user1身份啟動。
二、示例:以tomcat為例
由於tomcat運行需要JAVA_HOME,而在init進程運行時還未加載用戶的profile,所以需要在命令前指定JAVA_HOME。
1、默認以當前用戶即root身份啟動
在/etc/rc.local寫如下命令
export JAVA_HOME=/usr/share/jvm/jdk1.8.0_91 //執行rc.local時還未加載profile因此沒此句會報 沒找到JAVA_HOME或JRE_HOME變量 的錯誤 /home/act/apache-tomcat-8.0.36/bin/startup.sh > /home/act/apache-tomcat-autostart-log/`date +%Y%m%d_%H%M%S`.txt //執行並把信息輸出到指定文件
2、指定以其他用戶啟動
先在/etc/rc.local寫如下命令:
sudo -u act /home/act/apache-tomcat-8.0.36/bin/startup.sh > /home/act/apache-tomcat-autostart-log/`date +%Y%m%d_%H%M%S`.txt
再在tomcat/bin/下創建setenv.sh,setenv.sh里寫入 export JAVA_HOME=/usr/share/jvm/jdk1.8.0_91
相關:http://askubuntu.com/questions/468772/tomcat-does-not-recognize-java-home
When you starting
tomcat
usingcatalina.sh
, it searching for filesetenv.sh
and sourcing it. It is searching inCATALINA_HOME
orCATALINA_BASE
.即啟動tomcat時會先在bin/下找setenv.sh,如果里面設置了JAVA_HOME則優先用之。
Setting
JAVA_HOME
insetenv.sh
gives you ability to use different tomcats with different applications that need different version ofjava
, but running by one user. Other user environment would not be affected by you.