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

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

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

有什么更好的方法呢?我很惊讶没有tomcat的“ca​​nned”init脚本.我知道这并不复杂.但为什么我们必须继续重新发明轮子?

谢谢

我多年来一直在使用这个.我不记得我在哪里得到它.我刚刚添加了/ 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 dir在我的机器上的权限是:

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

所以这个文件夹只能由root写入.
您的脚本在开始之前切换到用户tomcat
服务,所以这不会奏效.

该脚本应该使用start-stop-daemon之类的工具
它可以在启动时以root身份发出PID文件
给定UID下的服务.

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

相关文章

insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...