tomcat7 webapp无法创建目录

时间:2013-12-07 04:32:45

标签: tomcat7 filenotfoundexception archlinux

我已经在办公室安装了archlinux进行开发。我们使用maven将我们的应用程序部署到tomcat。我已经安装了tomcat7.0.47。我已经设置好一切(我认为),我可以使用tomcat:redeploy将webapp部署到tomcat。 我可以使用systemctl启动,停止并重新启动tomcat。问题是tomcat无法创建(甚至找到)其日志目录或创建其他目录。 我知道这是一个文件权限问题,我已经完成了:

chown -R tomcat7:tomcat7

chmod -R 775

on / usr / share / tomcat7以及此目录中链接的所有目录,如/ etc / tomcat7 /等。

但是,当我重新部署到tomcat时,我看不到应用程序在firefox中启动(我得到404)而catalina.out给了我

java.io.FileNotFoundException: logs/raven/org.ird.raven.2013-12-07.log (No such file or directory)

和systemctl status tomcat7给了我:

tomcat7.service - Tomcat 7 servlet container
Loaded: loaded (/usr/lib/systemd/system/tomcat7.service; enabled)
Active: active (running) since Sat 2013-12-07 08:40:30 AFT; 15min ago
Process: 4453 ExecStart=/usr/bin/jsvc -Dcatalina.home=${CATALINA_HOME} -Dcatalina.base=${CATALINA_BASE} -Djava.io.tmpdir=/var/tmp/tomcat7/temp -cp /usr/share/java/commons-daemon.jar:/usr/share/java/eclipse-ecj.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar -user tomcat7 -java-home ${TOMCAT_JAVA_HOME} -pidfile /var/run/tomcat7.pid -errfile /var/log/tomcat7/catalina.err -outfile /var/log/tomcat7/catalina.out $CATALINA_OPTS org.apache.catalina.startup.Bootstrap (code=exited, status=0/SUCCESS)
Main PID: 4457 (jsvc)
CGroup: /system.slice/tomcat7.service
       ├─4456 jsvc.exec -Dcatalina.home=/usr/share/tomcat7 -Dcatalina.base=/usr/share/tomcat7 -Djava.io.tmpdir=/var/tmp/tomcat7/temp -cp /usr/share/java/commons-daemon.ja...
       └─4457 jsvc.exec -Dcatalina.home=/usr/share/tomcat7 -Dcatalina.base=/usr/share/tomcat7 -Djava.io.tmpdir=/var/tmp/tomcat7/temp -cp /usr/share/java/commons-daemon.ja...

Dec 07 08:40:30 archbase systemd[1]: tomcat7.service: Supervising process 4457 which is not our child. We'll most likely not notice when it exits.
Dec 07 08:40:30 archbase systemd[1]: Started Tomcat 7 servlet container.

在我更改文件权限后,我得到了类似的内容:

systemctl status tomcat7
PID file /var/run/tomcat7.pid not readable (yet?) after start.

我需要做些什么来完成这项工作。我真的很喜欢Arch。它快速而简单(在您设置之后)。有人可以帮帮我吗?

顺便说一句,我是第一次使用Windows 7,然后我去了OpenSuse,现在我想建立一个Arch。

2 个答案:

答案 0 :(得分:2)

是的,chmod对包所拥有的文件是不好的做法,因为这些权利是由包装商故意设置的。 pid not readable (yet?) after start很可能是由于chmod。我建议您使用pacman -Rs tomcat7,从/var/lib/tomcat7/webapps移除或备份已爆炸的战争,并最终使用pacman -S tomcat7重新安装Tomcat 7,然后重新安装。

至于您的原始问题,Tomcat 可以查找并编写其目录/日志,但似乎您的 webapp 或其依赖API之一不能。您应该看一下这个logs/raven/org.ird.raven.2013-12-07.log被设置为创建的位置,并且可能创建它应该在的目录层次结构。

您可以通过发出su tomcat7 -c "ls $DIR"su tomcat7 -c "mkdir $DIR来仔细检查Tomcat是否具有对目录的预期权限。

答案 1 :(得分:0)

使用Arch Linux一年后,我现在对它的了解比我第一次提出这个问题时所知道的要多得多。 @guroux的答案仍然有效且正确,但我想确保阅读此问题的任何人都有一个直接的答案,并花更少的时间来解决这个问题。 如果部署到tomcat的webapp无法将日志写入系统,则将webapp中的日志目标更改为tomcat可以写入的系统上的位置。还要确保已指定绝对位置。在arch linux(以及我遇到的其他Linux发行版)上有两个地方,tomcat有权写入:

  1. 的/ var /日志/ tomcat7
  2. 的/ tmp
  3. 您也可以将其用于其他目的。例如,我的webapp将用户照片保存在系统上。在生产服务器上,其位置类似于/vault/raven,但在我的工作机器上,我已将其设置为/tmp/vault。这具有可在任何地方部署的优点。我的意思是我可以立即开始在任何其他机器上工作,而不必担心为我的webapp创建目录。 如果你不想这样做,你可以像我第一次解决这个问题时那样做。这可能有缺点,但它是一个快速的解决方案。 只需转到运行tomcat的服务文件即可。在archlinux中,它位于/usr/lib/systemd/system/tomcat7.service中,并将-user tomcat7替换为-user root。执行systemctl daemon-reloadsystemctl restart tomcat7后,您的tomcat应该自己创建目录。然后将用户更改回tomcat7并使tomcat7成为这些目录的所有者并重新启动tomcat。