如何在 RHEL6 上将 TomEE 作为服务运行?

如何在 RHEL6 上将 TomEE 作为服务运行?

cat /etc/passwd(最后一行):

tomee:x:990:987::/home/tomee:/bin/false

我需要编写一个init.d脚本来运行 Tomcat EE,就像service tomee start

所以我有两个问题:

  1. 我如何以 tomee 用户(无 bash 登录)身份执行命令(从 root 开始)?

    sudo su - tomee -c“某些命令”

不起作用。

sudo - tomee -s "/bin/bash" -c "some command"

有效,但我认为它看起来很糟糕。

  1. 正如我所说,我将使用它来/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 用户写入。

相关内容