我正在尝试使用运行时执行从Java执行netstat命令,但它会抛出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)
要真正了解此处发生的情况,您需要查找实际的可执行文件,无论是netstat还是onetstat。
如果netstat在外壳程序中别名为onetstat-根据运行的外壳程序,“ whence”或“ alias”命令将告诉您。一个简单的解决方案可能是通过外壳程序(/ bin / sh -c netstat)运行命令,而不是直接运行netstat。
另一个可能性是这些命令是所谓的“外部链接”……UNIX服务路径名指向z / OS数据集中常规可执行文件的一种方式。如果是这种情况,那么您很可能在路径中有netstat / onetstat并以其他方式纠正了,但是您可能没有正确的STEPLIB或LNKLST串联。当系统执行程序成为目标(netstat / onetstat)时,它找不到外部链接的程序,而您会得到“未找到”的信息。
这里的所有事情都会出错,特别是当涉及外部链接时。可能存在系统(APF)授权问题,STEPLIB / LNKLST中缺少模块,没有足够的内存来加载程序,等等,等等。不幸的是,z / OS上的UNIX Services并不总是解释所有可能的失败代码,因此有时有必要去打猎。一个好的开始是捕获您所获取的异常并查找ERRNO / ERRNO2值-它们可以为您提供一个很好的提示。
如果您拥有传统的z / OS功能,那么您的朋友就是控制台日志... SDSF的Log功能或同等功能。控制台上可能会出现x06异常结束和CSV ...消息,这将为您提供下一步操作的线索。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句