以用户身份启动 Tomcat 7-init.d 脚本无法写入 pid

以用户身份启动 Tomcat 7-init.d 脚本无法写入 pid

我想在 CentOS 6 上以用户身份运行 Tomcat 7。我已经创建了一个用户tomcat:tomcat并在等下更改了所有权/var/lib/apache-tomcat*...

网上有很多关于如何做到这一点的文档,但我认为它们不是最新的。其中大多数都表明您可以按照下面的方法操作。问题是...这种技术会失败,因为由于文件系统权限较低,tomcat 启动等脚本无法写入 PID。我不想开始放松文件系统的写入权限。目标是提高安全性。

有什么更好的方法可以做到这一点?我很惊讶没有针对 tomcat 的“预制”初始化脚本。我知道这并不复杂。但是为什么我们必须不断地重新发明轮子呢?

谢谢

我已经使用这个好几年了。我不记得从哪里得到的。我刚刚添加了/bin/su tomcat

# Startup script for the Jakarta Tomcat Java Servlets and JSP server
#
# chkconfig: - 85 15
# description: Jakarta Tomcat Java Servlets and JSP server
# processname: tomcat
# pidfile: /var/run/tomcat.pid
# config:

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Set Tomcat environment.
export JAVA_HOME=/usr/lib/jvm/java/
#export CLASSPATH=.:/usr/local/j2sdk/lib/tools.jar:/usr/local/j2re/lib/rt.jar
export CATALINA_HOME=/var/lib/tomcat
#export CATALINA_OPTS="-server -Xms64m -Xmx512m -Dbuild.compiler.emacs=true"
#export PATH=/usr/local/j2sdk/bin:/usr/local/j2re/bin:$PATH
export CATALINA_PID=/var/run/tomcat.pid

[ -f $CATALINA_HOME/bin/startup.sh ] || exit 0
[ -f $CATALINA_HOME/bin/shutdown.sh ] || exit 0

export PATH=$PATH:/usr/bin:/usr/local/bin

# See how we were called.
case "$1" in
  start)
        # Start daemon.
        echo -n "Starting Tomcat: "
        /bin/su tomcat $CATALINA_HOME/bin/startup.sh
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down Tomcat: "
        /bin/su tomcat $CATALINA_HOME/bin/shutdown.sh
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat
        ;;
  restart)
        $0 stop
        sleep 1
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/tomcat ] && $0 restart
       ;;
  status)
        status tomcat
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

答案1

/var/run最有可能的是,我的机器上的目录的权限是:

drwxr-xr-x 24 root root 740 Mar 22 11:48 run

因此此文件夹只能由 root 写入。您的脚本在启动服务之前切换到用户tomcat,因此这不起作用。

该脚本应该使用类似的工具start-stop-daemon ,该工具能够在给定的 UID 下启动服务时以 root 身份发出 PID 文件。

看到这个脚本作为使用 的 init 脚本的示例start-stop-daemon

答案2

另一个选择是创建一个目录 /var/run/tomcat 并将其 chown 为 tomcat:tomcat。然后将您的 init 脚本更改为

# pidfile: /var/run/tomcat/tomcat.pid

export CATALINA_PID=/var/run/tomcat/tomcat.pid

相关内容