SSH를 통해 실행하면 스크립트가 반환되지 않습니다.

SSH를 통해 실행하면 스크립트가 반환되지 않습니다.

다음과 같이 SSH 클라이언트를 통해 스크립트를 호출합니다.

ssh root@host "su - oracle -c '~/bin/weblogic start'"

이것은 ~/bin/weblogic실제로 백그라운드에서 웹 서버를 시작하고 특정 패턴("서버 상태가 실행 중으로 변경됨")을 찾을 때까지 해당 로그를 읽고 표시한 다음 종료하는 bash 스크립트입니다. 원격 위치에서 호출하면 마지막 bash 명령을 실행한 후 정지됩니다. 나는 이것이 SO의 설명과 관련이 있다고 확신합니다(https://stackoverflow.com/questions/8122780/exiting-shell-script-with-Background-processes); 그러나 백그라운드에서 bash 스크립트를 시작할 수 없습니다 weblogic. 완료될 때까지 기다려야 하며 특정 모드까지 일반 stdout과 종료 코드를 가져와야 합니다.

Bash 코드는 다음과 같습니다.

   function start_server {
        ~/bin/weblogic.py
        echo 'Python script finished'
        exit 1
   }

   ....
   start_server

출력은 다음과 같습니다

... server output ...
...
... Server state changed to RUNNING ....
Python script finished

SSH 클라이언트가 반환되도록 하려면 어떻게 해야 합니까? 저는 솔라리스 11.3에서 실행하고 있습니다.

답변1

exit 1오류 상태를 알립니다. 이와 같은 스크립트의 경우 exit스크립트를 포함하면 안 됩니다.

이 기능을 사용해 보세요. 명령줄에서 startManagedWeblogic.shm에 호스트와 포트를 제공하거나 서버를 시작하기 전에 변수를 내보낼 수 있습니다. startManagedWebLogic.sh 스크립트를 읽어보면 제가 사용한 방법 대신 출력을 리디렉션하는 스크립트를 실행하기 전에 내보낼 수 있는 변수를 찾아야 합니다. Python 스크립트에서도 동일한 작업을 수행할 수 있습니다.

WebLogic 시작 스크립트는 서버가 중지될 때까지 실행됩니다. 백그라운드 로깅을 파일로 출력하고 서버를 거부해야 합니다. (서버를 시작하려면 nodeManager를 사용하는 것을 고려하십시오.) 그런 다음 파일이 실행될 때까지 파일을 추적하십시오.

function start_server {
    ~/bin/startManagedWeblogic.sh HOSTNAME PORT &> weblogic.out &
    disown
    ~/bin/tailUntilRunning.py weblogic.out
    echo 'Shell script finished'

}

Python(Jython 2.1) 스크립트에 대한 해석기로 wlst.sh를 사용해야 하지만 WLST 함수를 사용하여 서버를 시작할 수 있습니다.

관련 정보