Java-программа работает, но не в bash-скрипте - PullRequest
0 голосов
/ 08 марта 2012

Я создал java-программу, которая запускает команду "jps", видит все JVM и убивает конкретную JVM, извлекая ее идентификатор из выходных данных команды JPS. Он работает нормально, когда я запускаю его на терминале Ubuntu. Но затем я написал скрипт на bash для ssh на этом компьютере с другого компьютера и запустил там эту программу.

ssh $host "java -cp daemon.jar JVMname;"

Теперь возникает проблема.

Exception in thread "main" java.io.IOException: Cannot run program "jps": error=2, No     such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) at runtime.daemon.halt.main(halt.java:19)
Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method)  at  java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)

Если я сам иду к машине и запускаю эту же команду, она работает. Я не хочу переходить на решение exec.

Любые идеи Спасибо

1 Ответ

2 голосов
/ 08 марта 2012

Это не проблема Java как таковая , дело в разнице в вашей среде в обоих случаях.В частности, когда вы работаете в интерактивном режиме, ваша переменная $PATH содержит каталог для jps, тогда как в последнем случае через SSH это не так.

Посмотрите на .bash_profile и .bashrcфайлы на удаленном компьютере - я подозреваю, что путь будет задан в файле .bash_profile, который не выполняется для не входящих в систему оболочек (таких как ваш SSH-вызов, который запускает одну команду).Если вы правильно указали путь в .bashrc, то ваш текущий вызов должен начать работать.

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

...