Исполняющий модуль JAVA во время выполнения выдает IOException для команды netstat в среде USS мэйнфреймов
Я пытаюсь выполнить команду netstat из Java с использованием выполнения во время выполнения, но она выбрасывает ниже IOException.
Он отлично работает для других команд, даже команда синонимов onetstat работает нормально. Я пытаюсь понять, почему один netstat терпит неудачу и как заставить его работать. любая помощь приветствуется.
java.io.IOException: Cannot run program "netstat": netstat: not found
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1059)
at java.lang.Runtime.exec(Runtime.java:629)
at java.lang.Runtime.exec(Runtime.java:462)
at java.lang.Runtime.exec(Runtime.java:359)
at com.ca.RunCmd.executeCommand(RunCmd.java:30)
at com.ca.RunCmd.main(RunCmd.java:18)
Caused by: java.io.IOException: netstat: not found
at java.lang.UNIXProcess.fullPath(UNIXProcess.java:306)
2 ответа
Чтобы по-настоящему понять, что здесь происходит, вам нужно выследить фактический исполняемый файл, будь то netstat или onetstat.
Если netstat связывается с onetstat в оболочке - в зависимости от того, какую оболочку вы используете, команда wherece или alias сообщит вам. Простым решением может быть запуск команды через оболочку (/bin/sh -c netstat) вместо непосредственного запуска netstat.
Другая возможность состоит в том, что эти команды представляют собой так называемый "внешний канал"... способ указания пути к службе UNIX для указания на обычный исполняемый файл в наборе данных a z/OS. Если это так, то у вас вполне может быть netstat/onetstat в вашем пути и, в противном случае, он правильный, но у вас может не быть правильной конкатенации STEPLIB или LNKLST. Когда система exec является целью (netstat/onetstat), она не находит внешне связанную программу, и вы получаете "not found".
Все виды вещей могут пойти не так, особенно, когда задействованы внешние ссылки. Могут быть проблемы с авторизацией системы (APF), отсутствующие модули в STEPLIB/LNKLST, недостаточно памяти для загрузки программы и т. Д. И т. Д. И т. Д. К сожалению, службы UNIX в z / OS не всегда интерпретируют каждый возможный код ошибки, поэтому иногда это надо идти на охоту. Хорошим первым началом было бы поймать исключение, которое вы получаете, и искать значения ERRNO/ERRNO2 - они могут дать вам хороший совет.
Если у вас есть традиционные средства z / OS, ваш друг - это журнал консоли... Функция журнала SDSF или эквивалентная. Вполне возможно, что на консоли может быть x06 и CSV... сообщение, которое подскажет вам, что делать дальше.
Решение состоит в том, чтобы использовать фактическую команду вместо команды псевдонима, в этом случае фактической командой является onetstat, netstat - команда псевдонима. Проблема заключается в командах псевдонимов, когда вы пытаетесь выполнить команду псевдонимов во время выполнения Java, если они не выполняются. Я пока не могу найти точную причину, но проблема может быть легко воспроизведена путем создания псевдонима для любой команды, попробуйте выполнить их, вы можете попробовать это также в среде Windows.