0

如果这个问题已经得到解答,我提前道歉,但我找不到任何与此相关的具体内容。我有一个 python 程序,它在运行时启动一个子进程,它调用一个 java jar 文件。该命令如下所示:

# Build command line expression.
expr = self.cmmTool + " " + self.cmmIpAddress + " " + self.cmmUsername + " " + self.cmmPassword + " " + cmd + " > " + self.cmmOutputFile

# Execute command line expression.
p = subprocess.Popen(expr, shell=True)

如果我从命令行启动我的 python 程序,一切都很好。一个重要的注意事项是 jar 文件将在与 jar 文件相同的路径中创建一个 SMCIPMITool.properties。我的问题是我想将我的 python 程序作为服务运行。当我启动服务时,python 程序执行得很好,但是这个调用有问题。我的 python 程序捕捉到了这个并且程序不会崩溃,所以它会反复尝试执行这个。java 文件的输出进入上面指定的文件,如下所示:

java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied)
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory)
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied)
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory)
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory)
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory)
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied)
java.io.FileNotFoundException: ./SMCIPMITool.properties (Permission denied)
java.io.FileNotFoundException: ./SMCIPMITool.properties (No such file or directory)

请记住,这不是我的 jar 文件(由 super micro 预编译),所以我无法控制 java 代码。似乎在“服务区”中运行的 java 文件正在尝试将 .properties 文件写入它没有写入权限的位置,和/或找不到 .properties 文件。还要注意,jar 和 .properties 文件都存在于同一目录中。似乎当 jar 文件在“服务域”中执行时,它实际上可能并未在 jar 文件所在的目录中执行。

当我调用 java -jar 时,是否可以明确指定 .properties 文件的路径?有没有办法以某种方式在 JRE 中设置 .properies 文件的默认路径?我对接下来的步骤有点不知所措,谷歌也没有帮助。任何帮助将不胜感激!

使用实际代码的复制粘贴进行编辑。cmmTool 变量包含 /path/to/jar/jarFile

4

1 回答 1

0

解决了。需要将我的服务运行路径更改为 jar 文件和 .properties 文件所在的位置。似乎当我之前启动 jar 文件时,它实际上是在与文件所在位置不同的位置执行的。因此,它无法在同一目录中找到 .properties 文件。这是我的 /etc/init/myservice.conf 的样子(无论如何重要的部分...... .conf 的早期部分有一些我不应该分享的东西):

chdir /svbase/
expect fork

script
    exec /usr/bin/python /svbase/smapp/Main.py /svbase/config/product/smapp.xml &
end script

第一行是将服务的运行位置更改为 jar 文件和 .properties 文件所在的位置所必需的。

于 2013-06-24T18:16:18.163 回答