tomcat7 webapp无法创建目录
我已经在office for development中安装了archlinux。我们使用maven将应用程序部署到tomcat。我已经安装了tomcat7.0.47。我已经设置好了一切(我想),我可以使用tomcat:redeploy将webapp部署到tomcat。 我可以使用systemctl启动、停止和重新启动tomcat。问题是tomcat无法创建(甚至找不到)其日志目录或创建其他目录。 我知道这是一个文件权限问题,我已经做了:tomcat7 webapp无法创建目录,tomcat7,filenotfoundexception,archlinux,Tomcat7,Filenotfoundexception,Archlinux,我已经在office for development中安装了archlinux。我们使用maven将应用程序部署到tomcat。我已经安装了tomcat7.0.47。我已经设置好了一切(我想),我可以使用tomcat:redeploy将webapp部署到tomcat。 我可以使用systemctl启动、停止和重新启动tomcat。问题是tomcat无法创建(甚至找不到)其日志目录或创建其他目录。 我知道这是一个文件权限问题,我已经做了: chown -R tomcat7:tomcat7 及 在
chown -R tomcat7:tomcat7
及
在/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)
系统CTL状态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,现在我想建立一个Arch。是的,
chmod
对软件包拥有的文件进行保护是不好的做法,因为这些权限是由软件包商故意设置的。启动后的pid不可读(尚未?)
很可能是由于chmod
造成的。我建议使用pacman-Rs tomcat7
,从/var/lib/tomcat7/webapps
中删除或备份已爆炸的war,并最终使用pacman-S tomcat7
重新安装tomcat7,开始新的安装
至于你最初的问题,Tomcat可以找到并编写它的目录/日志,但你的webapp或它的一个依赖API似乎不能。您应该看看这个logs/raven/org.ird.raven.2013-12-07.log
设置在何处,也许可以在应该创建的地方创建其目录层次结构
通过发出
su-tomcat7-c“ls$DIR”
或su-tomcat7-c,您可以再次检查Tomcat对目录的预期权限“mkdir$DIR
使用Arch Linux一年后,我现在对它的了解比我第一次问这个问题时知道的要多@galaux的答案仍然有效且正确,但我想确保阅读此问题的任何其他人都有一个直截了当的答案,并且花更少的时间解决此问题。
如果部署到tomcat的webapp无法将日志写入系统,则将webapp中日志的目标更改为系统上tomcat可以写入的位置。还要确保指定了绝对位置。在arch linux(以及我所遇到的其他linux发行版)上,tomcat有权写入以下两个位置:
/vault/raven
,但在我的工作机器上,我已将其设置为/tmp/vault
。这样做的好处是可以在任何地方部署。我的意思是我可以马上开始在任何其他机器上工作,而不用担心为我的webapp创建目录。
再一次,如果你不想这样做,你可以像我第一次解决这个问题时那样做。这可能有缺点,但这是一个快速的解决方案。
只需转到运行tomcat的服务文件。在archlinux中,它位于
/usr/lib/systemd/system/tomcat7.service
中,并将-user-tomcat7
替换为-user-root
。一旦执行了systemctl守护进程重新加载
和systemctl重新启动tomcat7
,您的tomcat应该自己创建目录。然后将用户更改回tomcat7,并使tomcat7成为这些目录的所有者,然后重新启动tomcat。停止tomcat服务。。然后运行命令“chmod-R 777 tomcat folder”,并将war文件放在web应用程序文件夹中启动tom cat.StackOverflow是关于编程的。这个问题属于serverfault.com。据我所知,使用chmod 777是一种不好的做法。顺便说一句,我做到了,但运气不好。那真的很不寻常,不是吗?我照你说的做了。这是一个很好的建议。我删除了tomcat7(pacman-Rs),它删除了tomcat7用户和组。我再次创建了它们,并再次安装了tomcat7。我做了SudoSuTomcat7,我发现tomcat无法读取我的主目录(我们使用apache重定向tomcat以从主目录读取,以便于开发(apache中的别名).我让我的主目录对用户可读!!!现在我的应用程序可以运行了,但我不确定我是否应该这样做。另外,在安装tomcat时,它抱怨tomcat既不是组也不是用户,但它实际上需要的是“tomcat7”而不是“tomcat”。无需创建用户或组tomcat7
,它们都是通过包脚本创建的。至于tomcat7访问您的家:因为这看起来像一台开发机器,所以对我来说似乎没问题。对于一台生产机器,最好为tomcat7
创建一个带有R/W的专用目录。我没有15岁的声誉,所以我无法使用请注意你的答案。对不起。我把它标记为正确答案。你的建议很有帮助。我不能做sutomcat7-c"mkdir$DIR
但我尝试了sudo su tomcat7
,这也不起作用。我删除了tomcat7,然后删除了tomcat7用户和组。然后我创建了它们,并确保我可以作为tomcat7登录。我试着从我的文件所在的用户目录中读取。我无法读取。我让用户和组能够读取它们n安装了tomcat7。这解决了我的问题。我编辑了/usr/lib/systemd/system/tomcat7.service
,并使tomcat7以root用户身份运行(暂时)。这创建了我需要tomcat7创建的日志和vault文件夹。然后我再次更改了文件并使其再次作为tomcat7运行。感谢galaux.hi Hamid,您的方法很有帮助,但另外,如果我想创建单独的目录,例如/var/log/myapp和
systemctl status tomcat7
PID file /var/run/tomcat7.pid not readable (yet?) after start.