0

在 Centos 6.4 上,我正在尝试根据本教程运行多个 tomcat 实例: http ://www.openlogic.com/wazi/bid/188102/

为了说明问题,我将默认配置复制到/srv/tomcat/solr保持相同默认端口值的新实例(并停止默认服务 /etc/init.d/tomcat6 以避免端口冲突),如下所示:

sudo su -

yum install tomcat6

name=solr

mkdir -p /srv/tomcat/${name}/logs
mkdir /srv/tomcat/${name}/webapps
mkdir /srv/tomcat/${name}/work
mkdir /srv/tomcat/${name}/temp
cp -R /usr/share/tomcat6/conf/ /srv/tomcat/${name}
#rm /srv/tomcat/${name}/conf/tomcat6.conf  # this line is not in the tutorial, but adding it produces the same result
chown -R tomcat. /srv/tomcat/

ln -s /etc/init.d/tomcat6 /etc/init.d/${name}

cat >/etc/sysconfig/${name} <<EOF
CATALINA_BASE="/srv/tomcat/${name}"
CATALINA_PID="/var/run/${name}.pid"
CONNECTOR_PORT="8080"
TOMCAT_LOG="/srv/tomcat/${name}/logs/catalina.out"
EOF

# I keep the default port values at: /srv/tomcat/solr/conf/server.xml

/etc/init.d/tomcat6 stop   # to avoid port conflicts
/etc/init.d/${name} start  # i start my new instance

[root@localhost ~]# /etc/init.d/${name} start
Starting solr:                                             [  OK  ]

[root@localhost ~]# /etc/init.d/${name} status
PID file exists, but process is not running                [FAILED]

[root@localhost ~]# cat /srv/tomcat/solr/logs/catalina.out 
/usr/sbin/tomcat6: line 30: /srv/tomcat/solr/logs/catalina.out: Permission denied

可能是什么问题?

4

1 回答 1

0

我现在正在浏览相同的教程;首先,您的 catalina.out 中是否有更多信息可以告诉我们从哪些文件/文件中获得了 Permission denied 消息?

根据我所看到的,tomcat 似乎试图启动,创建了 PID 文件,但由于权限问题而意外死亡 - 从不清理 PID 文件。

我只能假设您已经阅读了文章末尾的评论 - 例如,第三条评论解释了一位读者如何必须在 /var/log 下创建/chown 新文件夹作为 /var/log/ ${i}。

几个想法:

  1. 我看到你做了一个“chown -R tomcat./srv/tomcat/”……我也可以在那里添加组,比如“chown -R tomcat:tomcat/srv/tomcat/”(我不知道用户tomcat之后那个点做了什么 - 这是一个错字吗?)
  2. 此外,教程中的这一行似乎不正确“cp -R /usr/share/tomcat6/conf//srv/tomcat/${i}”。本教程应该为 /usr/share/${i}/conf ... 创建一个目录,其中应该包含 server.xml、tomcat-users.xml、web.xml、context.xml 等文件。
  3. 您始终可以在启动脚本中添加一些日志记录,或者提高 tomcat 中的日志记录级别以尝试更深入地了解问题 - 这是使用开源软件的一大好处。使用武力,卢克!
  4. 我对“ln -s”命令、“cat >/etc/sysconfig/...”和“/etc/init.d/${name} start”命令之间发生的事情有点困惑。我看不到如何调用 sysconfig 文件(参见上面的#3)。我认为您需要制作一个副本,而不是“ln -s”,然后将您的 bash 变量放在该副本中,最后调用该副本。
  5. 如果您在 /srv/tomcat/${name}/webapps/ 下有任何战争,它们也需要归 tomcat:tomcat 所有。如果您以 root 用户身份启动您的 tomcat 实例,抓住自己,然后以 tomcat 身份启动,则可能会发生不好的事情。webapps 下的那些文件需要重新命名。在同一条线上,我在网上看到了一些例子,人们在 webapps/ 中加入了一个由 root 拥有的战争,然后在 tomcat 运行时将其 chown 给 tomcat 用户。我认为这是一种不好的做法。首先将它提供给 tomcat 用户,可能在一个临时目录中,然后将它放到 webapps/ 目录中。
于 2014-02-09T15:24:08.160 回答