Исполняющий модуль 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.

Другие вопросы по тегам