![以用户身份启动 Tomcat 7-init.d 脚本无法写入 pid](https://linux22.com/image/629432/%E4%BB%A5%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E5%90%AF%E5%8A%A8%20Tomcat%207-init.d%20%E8%84%9A%E6%9C%AC%E6%97%A0%E6%B3%95%E5%86%99%E5%85%A5%20pid.png)
我想在 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