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를 어떻게 스크립트해야 합니까?
미리 도움을 주셔서 진심으로 감사드립니다.