【发布时间】:2011-07-30 23:42:02
【问题描述】:
我们有一个在 JBoss 5 下运行的 Web 应用程序,它定期启动一个“java”进程(使用 ProcessBuilder)来在 Linux 上编译文件。该过程在 Windows 开发机器和我们已经安装的 Ubuntu 虚拟机上运行没有问题。命令如下:
/usr/java/jdk1.6.0_18/bin/java -Xmx256M -DiDesigner.javabin=java -jar "/aplicaciones/jboss/nfs/pmc_tdt/bin/lib/iDesigner.jar" --compiler --obfuscate --in "81.ida" --out "directory:OUTPUT"
导致错误的原因:
Unable to access jarfile "/aplicaciones/jboss/nfs/pmc_tdt/bin/lib/iDesigner.jar"
所有路径都被确认是正确的并且jar file path is enclosed by double quotes。在喝了两杯啤酒和一个巨无霸之后,系统部门确认运行 JBoss 的用户 (jbossadmin) 也是该文件的所有者:
[root@miv-multicanalidad-01 lib]# pwd
/aplicaciones/jboss/nfs/pmc_tdt/bin/lib
[root@miv-multicanalidad-01 lib]# ls -l iDesigner.jar
-rw-r--r-- 1 jbossadmin jbossadmin 1329162 ene 22 2010 iDesigner.jar
我怀疑是rights issue,所以我们请他们给change the permissions to execute,但唉,仍然不满意。
我唯一能想到的就是path translation error 或者我们没有在正确的地方应用正确的权限!
编辑: Andrea Spadaccini 提出了一个很好的建议,但似乎我们已经拥有通过路径的遍历权限:
drwxr-xr-x 3 root root 4096 abr 6 2010 /aplicaciones/
drwxr-xr-x+ 16 jbossadmin jbossadmin 4096 mar 7 10:13 /aplicaciones/jboss/
drwxrwxr-x+ 5 jbossadmin jbossadmin 4096 ene 25 09:21 /aplicaciones/jboss/nfs/
drwxr-xr-x 4 jbossadmin jbossadmin 4096 abr 6 16:03 /aplicaciones/jboss/nfs/pmc_tdt
drwxr-xr-x 4 jbossadmin jbossadmin 4096 sep 3 2010 /aplicaciones/jboss/nfs/pmc_tdt/bin/
drwxr-xr-x 3 jbossadmin jbossadmin 4096 abr 6 16:03 /aplicaciones/jboss/nfs/pmc_tdt/bin/lib/
编辑: 使用 Eva,我们可以确认通过命令行 (bash) 执行该行它可以工作,但是如果我们从 ProcessBuilder 类执行该行,它会引发错误,嵌入在一个 jar 中文件,在 Linux 中。就像我们的 JBoss 会做的那样。参数周围的双引号是此处问题的最可能原因。
【问题讨论】:
-
我将重新编译应用程序,并将 -verbose 参数添加到命令中。
-
这很奇怪。不幸的是,我对 JBoss 不熟悉。您可以跟踪与文件访问相关的所有系统调用,看看哪个失败了。使用命令
strace -e trace=file -o YOUR_TRACEFILE YOUR_COMMAND执行此操作。您将在YOUR_TRACEFILE中找到该命令发出的系统调用列表。检查返回值并查看发出了哪些错误。