JSch를 통한 "찾을 수 없음" 오류로 인해 Unix 명령 실행 실패
Java에서 JSch 라이브러리를 통해 특정 Unix 명령을 실행하려고 하면, 사용자는 명령을 찾을 수 없다는 오류가 발생할 수 있습니다.
문제 이해
대화형 SSH 클라이언트와 달리 JSch의 "exec" 채널은 의사 클라이언트를 할당하지 않습니다. 기본적으로 터미널(PTY)입니다. 이러한 환경 차이로 인해 대화형 세션에 비해 시작 스크립트 실행 및 PATH 설정이 달라질 수 있습니다. 결과적으로 특정 환경 변수에 의존하는 명령이 실패할 수 있습니다.
근본 원인 식별
근본 원인을 확인하려면 SSH 클라이언트에서 PTY 할당을 비활성화하고 다음을 시도하십시오. 명령을 수동으로 실행하십시오. 동일한 "찾을 수 없음" 오류가 발생하는 경우 대화형 세션과 비대화형 세션 간에 PATH 환경 변수가 다르다는 의미입니다.
해결책
이 문제를 해결하려면 , 선호도에 따라 다음 솔루션을 고려하세요.
1. 실행 파일 경로를 명시적으로 정의하도록 명령 수정
String command = "/bin/air sandbox run <graph-path>";
2. 시작 스크립트를 조정하여 PATH를 일관되게 설정
원격 서버의 시작 스크립트에서 대화형 세션과 비대화형 세션 모두에 대해 PATH가 동일하게 설정되어 있는지 확인하세요.
3. 로그인 셸을 사용하여 명령 실행
일반적으로 일관된 환경을 설정하는 로그인 셸을 통해 명시적으로 실행하려면 명령 앞에 "bash --login -c"를 추가하세요.
String command = "bash --login -c \"air sandbox run <graph-path>\"";
4. 명령에서 직접 환경 변수 설정
특정 환경 설정에 크게 의존하는 명령의 경우 다음 명령에서 직접 변수를 설정하는 것이 좋습니다.
String command = "PATH=\"$PATH;/path/to/air\" && air sandbox run <graph-path>";
5. 강제 PTY 할당(권장하지 않음)
최후의 수단으로 .setPty(true)를 사용하여 "exec" 채널에 대한 PTY 할당을 강제할 수 있습니다. 그러나 이 접근 방식은 원하지 않는 부작용을 초래할 수 있습니다.
추가 정보 및 유사한 문제에 대해서는 다음 리소스를 참조하십시오.
위 내용은 Java에서 JSch를 통해 Unix 명령을 실행할 때 '찾을 수 없음' 오류와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!