2013-06-24 2 views
0

Я заранее извиняюсь, если об этом уже был дан ответ, но я не могу найти что-либо, что конкретно связано с этим. У меня есть программа python, которая запускает подпроцесс во время выполнения, который вызывает java-файл jar. Команда выглядит так:Укажите путь к пути свойств java во время выполнения

# 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 будет создавать SMCIPMITool.properties по тому же пути, что и файл jar. Моя проблема в том, что я хочу запустить свою программу 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) 

Имейте в виду, что это не мой файл банка (прекомпилирована по супер микро), поэтому я не имею никакого контроля над кодом Java , Кажется, что java-файл, работающий на «служебной земле», либо пытается записать файл .properties в том месте, на котором у него нет доступа на запись, и/или не может найти файл .properties. Также следует отметить, что файл jar и .properties существуют в одном каталоге. Кажется, что когда файл jar выполняется на «служебной земле», это, пожалуй, не выполняется в каталоге, где находится файл jar.

Можно ли указать путь к файлу .properties явно, когда я вызываю java -jar? Есть ли способ установить путь по умолчанию к файлам .properies в JRE каким-то образом? Я немного не понимаю, что делать дальше, и Google не помогает. Любая помощь будет принята с благодарностью!

Отредактировано с копией пасты фактического кода. Переменная cmmTool содержит/path/to/jar/jarFile

+1

Я предполагаю, что вы просто забыли цитаты вокруг вашего 'expr =" ... "', да? –

+0

Вы можете попробовать использовать '' SMCIPMITool.jar'' вместо ''/path/to/jar /'' и вызывать 'subprocess.Popen (expr, cwd = '/ path/to/jar', shell = True) 'и это может повлиять на местоположение, которое служба создает или записывает файл. –

+0

Ах да, извините, я переписал свой код на Python на лету для этого вопроса. Код python отлично работает. Как я уже сказал, я запускал его много раз, запуская его из командной строки без проблем. Я попробую вашу рекомендацию cdd и отчитаюсь. – user1777820

ответ

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.