我一直在 Ubuntu 机器上运行 tomcat7 应用程序,一切运行正常。一段时间以来,可能是在系统更新之后,我收到奇怪的权限被拒绝错误,我对此感到很困惑。
tomcat7 应用程序“ChemDB”已部署,基本上运行正常。我正在使用 hsqldb 数据库访问磁盘上的文件,这就是问题所在。当应用程序尝试读取数据库时,我收到以下错误:
JavaException: java.sql.SQLException: The database is already in use by another process:
org.hsqldb.persist.NIOLockFile@61c4c3b4[file =/home/leo/ChemDB/chemdb.hsql.lck, exists=false, locked=false, valid=false, fl =null]:
java.io.FileNotFoundException: /home/leo/ChemDB/chemdb.hsql.lck (Permission denied)
文件夹权限为:
leo@lenovo2:~/ChemDB$ pwd
/home/leo/ChemDB
leo@lenovo2:~/ChemDB$ ll
drwxrwxrwx 2 tomcat7 tomcat7 4096 Jan 19 13:57 ./
drwx------ 46 leo leo 4096 Jan 19 14:08 ../
-rw-rw-rw- 1 tomcat7 tomcat7 51 Jan 9 2014 chemdb.hsql.log
-rw-rw-rw- 1 tomcat7 tomcat7 419 Jan 9 2014 chemdb.hsql.properties
-rw-rw-rw- 1 tomcat7 tomcat7 18427 Jan 9 2014 chemdb.hsql.script
在我看来好像所有内容都可以通过 tomcat7 写入。
tomcat 实例以用户“tomcat7”的身份运行:
leo@lenovo2:~/ChemDB$ ps aux | grep "tomcat"
tomcat7 10116 0.5 2.6 387396 108940 ? Sl 13:53 0:14 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC -Djava.endorsed.dirs=/usr/share/tomcat7/endorsed -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp org.apache.catalina.startup.Bootstrap start
我在 Tomcat 日志文件中找不到任何其他信息。
奇怪:如果我手动创建文件“chemdb.hsqldb.lck”,错误消息仍然显示“exists=false”。
我该如何修复此问题?