0

これがすでに回答されている場合は事前にお詫び申し上げますが、これに特に関連するものは見つかりません。実行時にJava jarファイルを呼び出すサブプロセスを起動するpythonプログラムがあります。コマンドは次のようになります。

# 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ファイル(スーパーマイクロでプリコンパイルされたもの)ではないので、Javaコードを制御できないことに注意してください。「サービス ランド」で実行されている Java ファイルが、書き込みアクセス権のない場所に .properties ファイルを書き込もうとしているか、.properties ファイルが見つからないか、またはそのいずれかのようです。また、jar ファイルと .properties ファイルは両方とも同じディレクトリに存在することに注意してください。jarファイルが「サービスランド」で実行されると、実際にはjarファイルが配置されているディレクトリで実行されていないようです。

java -jar を呼び出すときに、.properties ファイルへのパスを明示的に指定することはできますか? どうにかして JRE の .properies ファイルへのデフォルト パスを設定する方法はありますか? 私は次のステップに少し途方に暮れており、Google は役に立ちません。どんな助けでも大歓迎です!

実際のコードのコピペで編集。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 に答える