作为用户启动Tomcat 7 – init.d脚本不能写入pid

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

网上有很多关于如何做的文档,但是我不认为它们是最新的。 他们中的大多数表明你做如下。 问题是…这个技术会炸弹,因为tomcat启动等脚本由于文件系统权限较低而无法写入PID。 我不想开始放松对文件系统的写权限。 目标是增加安全性。

有什么更好的方法来做到这一点? 我很惊讶,没有一个“jar装”的初始化脚本的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 

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

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

所以这个文件夹只能被root用户写入。 在启动服务之前,您的脚本正在切换到用户tomcat ,所以这不起作用。

脚本应该使用一个像start-stop-daemon这样的工具,它能够在给定UID下启动服务时以root身份启动PID文件。

请参阅此脚本,作为使用start-stop-daemon的init脚本的示例。

另外一个选项是创build一个/ var / run / tomcat目录,并将其命名为tomcat:tomcat。 然后改变你的init脚本

 # pidfile: /var/run/tomcat/tomcat.pid export CATALINA_PID=/var/run/tomcat/tomcat.pid