2017-02-13 4 views
1

JSch를 사용하여 백그라운드 Java 프로세스에서 Python 스크립트를 원격 실행합니다.JSch를 사용하여 명령 실행

JSch 패키지에 포함 된 Shell.java 예제를 수정하여 내 Pi에 연결된 JSch를 성공적으로 설치했으며 사용자/도메인/암호/호스트 키 확인 프롬프트 상자를 주석 처리하여 이러한 값을 저장합니다 내 자바 코드에서 직접. 원격 파이로 내 자바 코드 로그인 후

, 나는 그것이 단자에

sudo nohup python2 myFoo.py & disown 

같은 것을 보내고 싶어요.

Shell.java 예제에서 채널 객체의 입력 및 출력 스트림을 System.inSystem.out으로 리다이렉트하는 코드 라인을 보았습니다.하지만 위의 라인을 리모트 터미널에 수동으로 삽입하고 싶습니다 연결을 끊습니다.

왜/내 목표 :
나는 Pi의 작은 메쉬 네트워크를 통해 대부분의 시간 동안 스크립트를 실행합니다. 가동 중단 시간을 없애고 싶지만 코드가 3-4 일 동안 반복적으로 작동 한 후 작동하지 않는 경우가 있습니다 (때로는 코드 버그가 발생하기 직전에 일주일 정도 기다리는 경우도 있음).
각 노드에서 실행중인 스크립트는 "마지막 체크인"필드가있는 mySQL 데이터베이스를 업데이트합니다.
Java에서 작은 배경 프로그램을 작성하여 내 서버에서 무기한 실행하여 각 스테이션에 대한 "마지막 체크인"을 확인하고 노드가 다운 된 것을 감지하면 원격으로 ssh를 실행하기를 희망합니다. 및 sudo reboot now, 약 60-100 초 기다린 다음 sudo nohup python2 myFoo.py & disown

+0

당신은 당신이 파일 우리의 소켓과 입력에서 읽기 같은 방법으로 – MadProgrammer

+0

[예제] (http://stackoverflow.com/questions/20560240를 스트리밍하는 것처럼, 출력 스트림에 직접 쓸 수 있습니다/send-command-via-ssh-and-read-ouput-results/20560773 # 20560773) 도움이 될 수 있습니다. – MadProgrammer

답변

0

잘못된 예제를 선택했습니다. "쉘"채널은 명령 실행을 자동화하는 것이 아니라 대화식 쉘 세션을 구현하기위한 채널입니다.

"exec"채널을 사용하십시오 (Exec.java example 참조).

Channel channel=session.openChannel("exec"); 
((ChannelExec)channel).setCommand(command); 
channel.connect(); 
...