Назад | Перейти на главную страницу

Запуск Tomcat 7 от имени пользователя - сценарий init.d не может писать pid

Я хочу запустить Tomcat 7 как пользователь на CentOS 6. Я создал пользователя 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

Еще один вариант - создать каталог / var / run / tomcat и привязать его к tomcat: tomcat. Затем измените свой сценарий инициализации на

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

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

Скорее всего, разрешения /var/run dir, как на моей машине:

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

Таким образом, эта папка доступна для записи только root. Ваш скрипт переключается на пользователя tomcat перед запуском службы, поэтому это не сработает.

Скрипт должен использовать такой инструмент, как start-stop-daemon который может использовать файл PID как root при запуске службы с заданным UID.

Посмотри это сценарий в качестве примера сценария инициализации, который использует start-stop-daemon.