LINUX.ORG.RU

Выполнение shell-команды средствами java

 


0

1

Приветствую пользователей! я - новичок и на форуме, и в администрировании.Есть проблема при запуске shell-команды средствами java на Solaris. Помогите разобраться, пожалуйста. Есть код(должен запускаться под root-ом) process = Runtime.getRuntime().exec(cmdarray); []cmdarray = {«/bin/sh», "-c", «mount»} Результат - не находит mount Попросила пользователя выполнить команды, вот результаты http://savepic.ru/13513018m.htm mount тоже отработала думала, что с $PATH косяк, но вроде все нормально настроено. в чем может быть дело?


в чем может быть дело?

в том что код запускается таки не под рутом, или у программы переменный окружения другие - в программе ты можешь их получить и вывести в лог - чтобы потом можно было разобраться

Deleted
()
Ответ на: комментарий от Deleted

да,я вывожу все в лог. запуск под рутом - обязательное условие для юзера, но я перепроверю, тоже была мысль. несовсем ясно что здесь имеете в виду: «у программы переменный окружения другие» (я просила вывести $PATH и mount для проверки, правда, в терминале)

jemma
() автор топика
Ответ на: комментарий от jemma

несовсем ясно что здесь имеете в виду

то самое и имею ввиду, проверяется либо через http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getenv--

либо в списке процессов - но я хз как там у соляриса это посмотреть

вообще если твою программу использует конечный юзер без твоего присмотра, то сразу делай механизм сбора «информации для отчетов об ошибках» - т.е. под каким юзером запущена, какие переменные окружения, системное время и т.п. потому что бывают юзеры которые искренне убеждены все делают правильно, а потом оказывается что там что-то типа:

pupkin@localhost% root 
sh: command not found: root
pupkin@localhost% you-programm.sh

И у девелоперов два дня истерики.

Deleted
()
Ответ на: комментарий от Deleted

либо в списке процессов - но я хз как там у соляриса это посмотреть

pargs

anonymous
()
Ответ на: комментарий от Deleted

сегодня продолжила выяснять по этому таску, но что-то тупанула и в java-код добавила «who» вместо «whoami»(завтра получу лог с «whoami»))) в лог добавились пользователи, рута среди них нет.немножко поясню:имеется консоль, через которую юзер/удаленный админ запускает java-код, содержащий shell-команду(Runtime.exec(«mount»)).консоль запущена под рутом(попросила вывести ps -ef). мой лид ругает меня и говорит,что не может такого быть, что консоль под рутом, а команды из кода выполняются под другим пользователем, но сам никаких мыслей не выдвигает(( завтра попробую процессы вывести в лог, хотя он мне сказал так не делать на верном ли я пути?спасибо

jemma
() автор топика
Ответ на: комментарий от jemma

вот вывела бы переменные окружения сразу было бы ясно, потому что у рута в PATH должен появится sbin - сразу было бы ясно работает ли под рутом и не сломанны ли переменные

а вообще как я писал выше надо не костили ставить - а режим сбора информации, включать его при выбрасывании ошибки или например опцией командной строки

ps. и юзера можно получить через

System.getProperty("user.name")

Deleted
()
Ответ на: комментарий от Deleted

public static Map<String,String> getenv() - не заюзаю, т.к. там java 1.3)))) как вариант - public static String getenv(String name), только что передать в метод несовсем ясно

jemma
() автор топика
Ответ на: комментарий от jemma

не заюзаю, т.к. там java 1.3

омг, ну там скорее всего Map без параметров

только что передать в метод несовсем ясно

ну емае имя env переменной, «PATH» например

ps. омг ява 1.3 в 2017 году, яб уже убежал оттудова

Deleted
()
Ответ на: комментарий от Deleted

тих-тих) у меня тоже была абсолютно такая же мысль. к сожалению, на этой шараге жизнь научила,что иногда лучше молчать,чем говорить, причем не важно, права я или нет, что-то предлагать, обсуждать - заведомо провал((( действительно пора валить

jemma
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.