【问题标题】:Unable to create the directory error无法创建目录错误
【发布时间】:2015-04-01 00:11:14
【问题描述】:

我创建了一个新的子域并将WAR文件上传到它的目录,但是服务器返回以下错误。

java.io.IOException: Unable to create the directory[/home/jack/public_html/WAR/MYWAR]
.....

WAR文件夹和WAR文件的权限为0755。

drwxr-xr-x  4 jack jack      4096 Feb  2 02:43 ./
drwxr-xr-x 10 jack nobody     4096 Jan 25 01:48 ../
drwxr-xr-x  2 jack jack      4096 Jan 24 22:38 cgi-bin/
-rwxr-xr-x  1 jack jack  82135738 Feb  2 02:23 MYWAR.war*
drwxr-xr-x  4 jack jack      4096 Jan 25 01:31 WEB-INF/

ps -aux | grep tomcat

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      1239  0.0  0.0 103240   864 pts/2    S+   04:38   0:00 grep tomcat
root      1330  0.0  0.0  10436   352 ?        Ss   Feb01   0:00 jsvc.exec -user tomcat -cp ./bootstrap.jar -Djava.endorsed.dirs=../common/endorsed -outfile ../logs/catalina.out -errfile ../logs/catalina.err -verbose org.apache.catalina.startup.Bootstrap start
tomcat    1334  0.2 14.9 1566688 151852 ?      Sl   Feb01   1:38 jsvc.exec -user tomcat -cp ./bootstrap.jar -Djava.endorsed.dirs=../common/endorsed -outfile ../logs/catalina.out -errfile ../logs/catalina.err -verbose org.apache.catalina.startup.Bootstrap start

【问题讨论】:

  • 运行这个程序的用户是什么,要创建的目录的上层目录的所有者是什么?
  • 我在哪里可以找到这些信息?
  • ps 辅助 | grep programm name, 对于目录 ls -al
  • @armnotstrong 输出是 root 1196 0.0 0.0 103240 864 pts/2 S+ 04:35 0:00 grep MYWAR
  • 尝试 ps -aux | grep tomcat

标签: java linux tomcat war


【解决方案1】:

0755 是 rwxr-xr-x。如果您不是目录的所有者(通常是用户nobody),则不能在目录中写入。您需要是目录或根目录的所有者才能在该位置写入。

【讨论】:

  • 谢谢,请问如何解决这个问题?我刚刚更新了问题
  • ls -l 将向您显示 linux 机器上的权限和所有者
  • 也许是sudo chmod g+w the_directory_in_which_you_want_write? (如果您只是在目录所有者的组中:最好只允许对全世界的组)
【解决方案2】:

我们需要确保 Tomcat 有权完全访问这些文件夹。首先确定 Tomcat 在哪个用户或组中运行。接下来授予该用户和/或组所有权。例如,以下代码将更改目录 test 文件夹及其下所有内容的所有权:

sudo chown -R owner:group /home/blabla/test

这将赋予所有者和组执行命令的所有权。 http://www.computerhope.com/unix/uchown.htm

接下来我们使用 chmod 来授予权限,该权限定义了文件所有者(“用户”)、拥有该文件的组的成员(“组”)的权限

http://www.computerhope.com/unix/uchmod.htm

【讨论】:

  • 谢谢,请阅读我的 cmets 提出的问题,我已经将 tomcat 添加到一个组并授予对该组的完全访问权限,但它还没有解决问题。
  • @Jack 无法创建目录“/home/jack/public_html/WAR/MYWAR”。我怀疑您的“MYWAR”目录已经存在,因此无法再次创建它。如果是这种情况,请先删除 MYWAR 目录。
  • 不,不是目录中只有一个 MYWAR.war 文件。
  • 好的,能不能通过chmod把WAR目录的权限从775改成777,看看能不能用
  • 你能做到吗?这是命令:sudo chmod 777 /home/jack/public_html/WAR
【解决方案3】:

尝试:

sudo chown -R tomcat:tomcat /home/jack/public_html/

您可能不需要更改整个public_html,但您可以尝试查看它是否有效,然后将权限限制为您想要的文件夹。

【讨论】:

    【解决方案4】:

    看来你需要

    授予组对 WAR 目录的完全访问权限

    sudo chmod 775 /home/jack/public_html/WAR/
    

    然后将目录的组改为tomcat

    chown -R jack:tomcat /home/jack/public_html/WAR/
    

    【讨论】:

      【解决方案5】:

      如果权限,用户和组是正确的。也许答案是selinux。

      【讨论】:

        【解决方案6】:

        首先检查tomcat根目录的权限和所有权。在我的情况下 /usr/share/tomcat/

        chown -R tomcat:tomcat /usr/share/tomcat

        检查 selinux。

        获取强制

        如果它会返回 Enforcing set selinux to Permissive

        setenforce 0

        然后重新启动 tomcat 并从 tomcat 重新加载应用程序。问题将得到解决。

        【讨论】:

          猜你喜欢
          • 2016-12-18
          • 2016-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多