Expect 스크립트를 사용한 Upstart 스크립트

Expect 스크립트를 사용한 Upstart 스크립트

Expect 스크립트와 upstart 스크립트를 결합하는 방법에 대해 조언해 주세요.

저는 지금 3개의 스크립트를 작업 중입니다.

스크립트 A) 자바 프로그램

   PATH: /opt/~~/manager

스크립트 B) Reborn 스크립트 A의 Upstart 스크립트

   PATH: /etc/init/xx.conf

스크립트 C) 헬스체크– 푸시 스크립트 A는 다른 서버의 프로세스에 명령을 보내고 연결 상태를 확인합니다. 크론으로 실행합니다.

   PATH: /opt/x~x/healthcheck.sh

내가 하고 싶은 일은

1) 서버가 다시 시작되거나 프로세스가 종료될 때마다 Java 프로세스를 다시 시작합니다. 이는 스크립트 B를 사용하여 수행됩니다.

2) 헬스 체크 프로그램(스크립트 C)을 정기적으로 실행하여 Java 프로세스와 다른 서버의 프로세스 간의 연결을 유지합니다. 이 프로그램의 기능은 Telnet을 통해 이웃 서버 프로세스에 링크 명령을 보내는 것입니다.

위에서 언급한 "2"에서 실패하고 있어 조언을 구하고 싶습니다.

현재 내 스크립트는 다음과 같습니다.

스크립트 B)

description “description”

start on runlevel [2345]

stop on runlevel [!2345]

env USER=executinguser

respawn
respawn limit 2 10

script

      while [ ! "`ifconfig -s | grep eth1`" ]
      do
        sleep 5
      done

      su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager start | \
      tee -a  /opt/~~.log"
    end script

pre-start script

      RET=`su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager status > /dev/null" || echo $?`
      if [ "$RET" -eq "0" ] || [ -z "$RET" ] ; then
        su - ${USER} -c "source /opt/~~/.bash_profile && \
        /opt/~~/manager force-stop"
      fi
    end script

pre-stop script

      su - ${USER} -c "source /opt/~~/.bash_profile && \
      /opt/~~/manager r force-stop"
    end script

위 스크립트는 제대로 작동하며 프로세스가 오류 없이 다시 생성됩니다.

그런 다음 이 스크립트에 자동 프로세스 라우팅을 추가하기 위해 기본 "스크립트" 섹션 뒤에 이 줄을 추가하여 원하는 스크립트를 호출했습니다.

/usr/bin/sh -f /etc/init/autolink.sh

실행 권한을 부여하도록 파일의 권한을 변경합니다. -rwxr-xr-x 1 루트 루트 207 5월 14일 11:25 autolink.sh

/etc/init/autolink.sh

#!/usr/bin/expect -f

puts "First test"

set CMD "link routename IPaddress Port"
set HOST "localhost"

  spawn telnet ${HOST}
  expect “`^]`"
  send \"${CMD}\n\"
  expect "000"

나는 또한 다음을 시도했습니다


#!/usr/bin/expect -f

puts "First test"

  spawn telnet IPaddress Port
  expect “`^]`"
  send "link routename IPaddress Port"
  expect "000"

스크립트 B에서 다른 경로를 사용하여 예상 스크립트를 호출하려고 시도하고 다른 확장명과 셔뱅을 사용하여 예상 스크립트 이름을 지정하려고 시도했지만 그 중 아무 것도 작동하지 않습니다. 사실 제가 시도한 옵션 중 어느 것도 "puts" First test" 줄을 읽지 않습니다. 또는 예상되는 스크립트의 일부로.

Expect 스크립트를 단독으로 실행할 때 -# ./autolink.sh

잘 작동하고 "^]"를 수신한 다음 마지막으로 "000"을 수신하지 못하고 링크 명령을 보낸 후 종료됩니다.

나는 또한 <1> 기동 스크립트의 변수에 Expect 스크립트를 삽입하고 해당 변수를 에코하거나 <2> "expect -c" 또는 "/usr/bin/"을 사용하여 스크립트의 예상 부분을 입력하는 것에 지쳤습니다. <

내 질문은 - 쉘 스크립트에서 예상 스크립트를 어떻게 호출해야 합니까? 적절한 shebang 및 명령을 사용하여 Expect를 어떻게 스크립트해야 합니까?

미리 도움을 주셔서 진심으로 감사드립니다.

관련 정보