Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tomcat7 webapp无法创建目录_Tomcat7_Filenotfoundexception_Archlinux - Fatal编程技术网

tomcat7 webapp无法创建目录

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 及 在

我已经在office for development中安装了archlinux。我们使用maven将应用程序部署到tomcat。我已经安装了tomcat7.0.47。我已经设置好了一切(我想),我可以使用tomcat:redeploy将webapp部署到tomcat。 我可以使用systemctl启动、停止和重新启动tomcat。问题是tomcat无法创建(甚至找不到)其日志目录或创建其他目录。 我知道这是一个文件权限问题,我已经做了:

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有权写入以下两个位置:

  • /var/log/tomcat7
  • /tmp
  • 您也可以出于其他目的执行此操作。例如,我的webapp将用户照片保存在系统上。在生产服务器上,其位置类似于
    /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.