cat /etc/passwd
(最后一行):
tomee:x:990:987::/home/tomee:/bin/false
我需要编写一个init.d
脚本来运行 Tomcat EE,就像service tomee start
。
所以我有两个问题:
我如何以 tomee 用户(无 bash 登录)身份执行命令(从 root 开始)?
sudo su - tomee -c“某些命令”
不起作用。
sudo - tomee -s "/bin/bash" -c "some command"
有效,但我认为它看起来很糟糕。
- 正如我所说,我将使用它来
/etc/init.d/tomee
服务 bash 脚本,而这里的问题是,我需要JAVA_HOME
在执行上述命令之前以某种方式设置环境变量。(那么,如果 tomee 用户是系统用户并且没有 shell,该怎么做?)
我也有一个问题(警告)couldn't change dir to /home/tomee
。是的,它不存在,但我创建了系统用户。
我正在使用 RHEL(不是最新的,所以没有 systemd)。如何在 RHEL6 上将 TomEE 作为服务运行?
更新 #1:
[root@localhost httpd]# su tomee /usr/local/tomee-webprofile-1.7.2/bin/startup.sh
[root@localhost httpd]#
没有任何结果。只有
su - tomee -s "/bin/bash" /usr/local/tomee-webprofile-1.7.2/bin/startup.sh
有效,但我不想看到这个可怕的-s "/bin/bash"
部分。
而且,根据JAVA_HOME
,如果我把它放在init.d
脚本(tomee)中,那么它只对 root 有意义,因为脚本以 root 身份运行,所以对于 tomee 用户来说init.d
就没有了?JAVA_HOME
更新 #2:
[root@localhost ~]# su tomee -s "/bin/bash" -c "echo hi"
它打印“hi”——没问题。
[root@localhost ~]# su tomee -c "echo hi"
它什么也没打印。为什么?
更新 #3:
我终于成功了:
su -s /bin/bash $TOMCAT_USER $TOMCAT_CATALINA_SH stop
我注意到 oracle db 的初始化脚本使用相同的方法,所以我认为没问题。
顺便说一句,我仍然不明白为什么我们需要在执行*.sh
文件时指定 shell,因为第一行是这样的#!/bin/bash
。
答案1
服务启动由根开始托米服务。它不是 init 脚本将运行的实际命令。此 init 脚本包含在下面。
JAVA_HOME应该在初始化脚本中设置。
/etc/init.d/tomee(需要标记为可执行文件):
#!/bin/bash
# description: TomEE Start Stop Restart
# processname: tomee
# chkconfig: 234 20 80
TOMEE_USER=tomee
JAVA_HOME=/usr/java/jdk1.6.0_33
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=apache-tomee-webprofile-1.0.0
case $1 in
start)
/bin/su $TOMEE_USER $CATALINA_HOME/bin/startup.sh
;;
stop)
/bin/su $TOMEE_USER $CATALINA_HOME/bin/shutdown.sh
;;
restart)
/bin/su $TOMEE_USER $CATALINA_HOME/bin/shutdown.sh
/bin/su $TOMEE_USER $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
改编自http://www.davidghedini.com/pg/entry/apache_tomee_on_centos_6。
编辑CATALINA_HOME上面的内容是 TomEE 安装的绝对路径。确保 tomee 用户可读取它,并且其中的 webapps、logs、temp 和 work 目录可由 tomee 用户写入。