在检查文件夹权限和日志后,我们发现在上传文件时,无法写入用户目录(即文件夹虽然有写权限,但无法写入文件),进而导致应用程序无法正常使用。

公司在Linux服务器上部署一个基于Java的Web应用程序,使用的是Tomcat为应用程序提供服务。在测试应用程序时,发现应用程序无法在服务器上正常启动,无法访问。经过检查,发现Tomcat服务已经正常启动并且正在监听应用程序的默认端口。前往日志文件查看,发现以下的错误信息:

java.io.FileNotFoundException: c:/demo/upload/abc.jpg (Permission denied)
在检查文件夹权限和日志后,我们发现在上传文件时,无法写入用户目录(即文件夹虽然有写权限,但无法写入文件),进而导致应用程序无法正常使用。

检查文件夹权限是否正确:使用 chmod 命令添加修改权限。 有权限就检查文件所有者是否正确:使用 chown 命令更改所有者为正确的用户。这两种情况之间肯定有一个发生了。排查一下

报错的路径是在C盘,确定运行Tomcat服务的用户有这个目录的操作权限,不是你当前登录系统的这个用户。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/746563
  • 以下回答来自chatgpt:

    针对该问题,可以从以下几个方面入手解决:

    1. 检查上传文件时的目录权限问题

    可以使用命令行进入相关的上传文件目录,并使用ls -al命令查看该目录的权限设置,确保有执行权限。如果没有,则需要给该目录添加执行权限:

    $ chmod +x /path/to/upload/directory
    

    然后使用touch命令创建测试文件来检查写权限:

    $ touch /path/to/upload/directory/test.txt
    

    如果文件能够成功创建,则表示写权限已经正常。如果还有其他依赖于该目录的操作,也需要进行检查和修复。

    1. 检查环境变量的设置

    在Linux系统中,需要设置JAVA_HOME和CATALINA_HOME这两个环境变量才能正常运行Tomcat服务。如果环境变量没有设置或者设置错误,则会影响应用程序的正常启动。可以使用echo命令查看这两个环境变量的值是否正确:

    $ echo $JAVA_HOME
    /usr/lib/jvm/java-8-openjdk-amd64
    $ echo $CATALINA_HOME
    /opt/tomcat
    

    如果显示的值不正确,可以通过修改~/.bashrc文件来设置环境变量值:

    $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    $ export CATALINA_HOME=/opt/tomcat
    

    然后使用source命令使修改立即生效:

    $ source ~/.bashrc
    
    1. 检查Tomcat服务端口是否被占用

    如果Tomcat端口被其他进程占用,则无法启动服务,需要检查端口是否可用。可以使用命令查看当前所有打开的端口以及对应的进程ID:

    $ netstat -tlnp
    

    其中,-t选项表示查看TCP协议的端口,-l选项表示查看正在监听的端口,-n选项表示以数字形式显示端口号,-p选项表示查看对应的进程ID。

    如果发现Tomcat服务所绑定的端口已经被占用,则需要使用相关命令杀死对应的进程:

    $ kill -9 [PID]
    

    其中,[PID]表示要杀死的进程ID。

    1. 检查Tomcat服务是否正常启动

    如果Tomcat服务已经启动,但是应用程序仍然无法正常访问,可以通过查看Tomcat的日志文件来排查问题。可以使用命令进入Tomcat的logs目录,并查看catalina.out文件:

    $ cd /opt/tomcat/logs
    $ tail -f catalina.out
    

    如果在启动服务过程中出现错误,可以通过日志中打印的信息来查找问题并进行修复。

    1. 检查安全组是否开放端口

    如果是在云服务器上部署应用程序,还需要检查安全组是否开放了Tomcat服务所使用的端口。可以在云控制台上进行相关设置,确保端口可以对外连接。同时,也需要检查防火墙设置,如果有必要则打开对应的端口。

    1. 修改Tomcat的配置文件

    如果以上方法都没有解决问题,可以尝试修改Tomcat的配置文件,并重新启动服务。可以进入Tomcat的conf目录,使用文本编辑器打开server.xml文件。在文件中可以找到相应的端口设置,例如:

    <Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
    

    如果需要更改端口,可以将port="8080"的部分改为其他值,例如port="8888"。修改完成后保存文件,重新启动Tomcat服务即可。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^