我在开发办公室安装了archlinux。我们使用maven将应用程序部署到tomcat。我安装了tomcat7.0.47。我已经设置好了一切(我认为),我可以使用tomcat:redeploy将webapp部署到tomcat。我可以使用systemctl启动、停止和重新启动tomcat。问题是tomcat无法创建(甚至找到)其日志目录或创建其他目录。我知道这是一个文件权限问题,我已经做了:
chown -R tomcat7:tomcat7和
chmod -R 775在/usr/share/tomcat7 7和该目录中链接的所有目录(如/ etc /tomcat7 7/等)上。
但是,当我重新部署到tomcat时,我看不到应用程序在firefox中启动(我得到404),而catalina.out给了我
java.io.FileNotFoundException: logs/raven/org.ird.raven.2013-12-07.log (No such file or directory)而systemctl状态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.我该怎么做才能让这件事成功。我真的喜欢在拱门上工作。它是快速和简单的(在你设置它之后)。有人能帮我吗?
顺便说一句,我首先在Windows 7上工作,然后我去了OpenSuse,现在我想建立一个拱门。
发布于 2013-12-10 14:17:42
是的,包拥有的文件上的chmod是错误的做法,因为这些权利是由包商故意设置的。pid not readable (yet?) after start很可能是chmod造成的。我建议使用pacman -Rs tomcat7,从/var/lib/tomcat7/webapps中删除或备份已爆炸的war,最后用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是否具有目录上的预期权限。
发布于 2014-12-18 11:19:44
在使用Arch一年之后,我现在对它的了解比我第一次问这个问题时所知道的要多得多。@galaux的答案仍然是有效和正确的,但我想确保任何阅读这个问题的人都有一个直截了当的答案,并且花更少的时间来解决这个问题。如果部署到tomcat的webapp不能向系统写入日志,那么将webapp中日志的目的地更改为tomcat可以写入的系统中的某个位置。还要确保您已经指定了绝对位置。在arch linux上有两个地方(据我所见,还有其他linux发行版),tomcat有权写到:
你也可以为了其他目的来做这件事。例如,我的webapp将用户照片保存在系统上。在生产服务器上,它的位置类似于/vault/raven,但在我的工作机器上,我已经将其设置为/tmp/vault。这样做的好处是可以在任何地方部署。我的意思是,我可以立即开始在任何其他机器上工作,而不必担心为我的for应用程序创建目录。如果你不想这样做,你可以像我第一次解决这个问题时那样做。这可能有缺点,但这是一个快速的解决办法。只需转到运行tomcat的服务文件。在archlinux中,它在/usr/lib/systemd/system/tomcat7.service中,并将-user tomcat7替换为-user root。完成systemctl daemon-reload和systemctl restart tomcat7之后,tomcat应该自己创建目录。然后将用户更改为tomcat7,并使tomcat7成为这些目录的所有者,并重新启动tomcat。
https://stackoverflow.com/questions/20437614
复制相似问题