Ubuntu 设置程序开机启动(以指定用户身份)
一、方法
在/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.