Iniciando o Tomcat 7 como um script user-init.d não pode escrever pid

4

Eu quero rodar o Tomcat 7 como um usuário no CentOS 6. Eu criei um usuário tomcat:tomcat e mudei a propriedade sob /var/lib/apache-tomcat* etc ...

Há muitos documentos on-line sobre como fazer isso, mas não acho que eles estejam atualizados. A maioria deles indica que você faz isso abaixo. O problema é ... essa técnica será bombardeada porque os scripts etc de inicialização do tomcat não podem gravar no PID devido a permissões mais baixas no sistema de arquivos. Eu não quero começar a liberar permissões de gravação no sistema de arquivos. O objetivo é aumentar a segurança.

Qual é a melhor maneira de fazer isso? Estou surpreso que não haja um script de inicialização "enlatado" para o tomcat. Eu sei que não é complicado. Mas por que temos que continuar reinventando a roda?

Obrigado

Eu tenho usado este por anos. Não me lembro de onde consegui. Acabei de adicionar /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
    
por PrecisionPete 22.03.2014 / 20:17

2 respostas

1

Provavelmente, as permissões do /var/run dir como na minha máquina são:

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

Portanto, esta pasta só pode ser gravada pelo root. Seu script está mudando para o usuário tomcat antes de iniciar o serviço, então isso não vai funcionar.

O script deve usar uma ferramenta como start-stop-daemon que é capaz de tee out o arquivo PID como root ao iniciar o serviço sob um determinado UID.

Veja este script como um exemplo de um init script que está usando start-stop-daemon .

    
por 22.03.2014 / 20:43
1

Uma outra opção é criar um diretório / var / run / tomcat e usá-lo para o tomcat: tomcat. Em seguida, mude seu script de inicialização para

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

export CATALINA_PID=/var/run/tomcat/tomcat.pid
    
por 05.07.2015 / 04:00