WebLogic 호스팅 서버를 시작하는 몇 가지 쉘 스크립트가 있습니다. 다음을 수행하는 기본 스크립트를 디자인해야 합니다.
- 실행 구성 요소\호스팅 서버 셸 스크립트
- 구성 요소의 포트가 2분 동안 수신 대기하는지 확인하세요(이 값은 무엇이든 가능하지만 이러한 서비스는 시작하는 데 2분 이상 걸리지 않아야 함).
- 2분 이내에 서비스가 시작되면 계속해서 다음 서비스를 시작하고, 그렇지 않으면 서비스 시작에 실패했다는 로그 메시지를 작성하여 계속합니다.
스크립트는 다음과 같습니다.
svcs = some_array_of_svcs
log = '/path_to_log/log.txt'
' start each service'
for each $svc in $svcs
echo "starting $svc" >> ${log}
. /path_to_scripts/$svc
' check to see if the service started
loop for max 2 mins
if port is listening
echo 'Service started successfully' >> ${log}
start the next service
else
echo 'Service did not start within the specified timeout' >> ${log}
start the next service
end if
next
포트 상태를 확인하려면 코드가 필요합니다N서비스당 시간(분)
답변1
netcat이 구출됩니다... Netcat은 텔넷과 매우 유사하지만 몇 가지 놀라운 추가 옵션이 있습니다. 이 경우 특별한 용도 중 하나는 연결이 유효한지 확인하는 -z입니다. 시간 초과 변수와 함께 시스템이 서비스가 수신 중인지 반복적으로 확인하도록 할 수 있습니다.
로컬에서는 SSH를 활성화했지만 텔넷은 활성화하지 않았습니다.
$ nc -zw10 localhost 22
$ echo $?
0
$ nc -zw10 localhost 23
$ echo $?
1
테스트를 더 명확하게 하기 위해... 앞서 언급한 제한 시간 2분을 가정합니다. 4번 확인하고 매번 30분 동안 타임아웃됩니다. 날짜 스탬프가 더 좋을 수도 있지만 이는 시작일 뿐입니다.
for i in {1..4}; do
nc -zw30 localhost 22
x=$?
[[ $x -eq 0 ]] && break
done
if [[ $x -eq 0 ]]; then
echo 'Service started successfully' >> ${log}
else
echo 'Service did not start within the specified timeout' >> ${log}
fi
start next service
답변2
포트 상태를 확인하는 또 다른 방법은 netstat
유틸리티를 사용하는 것입니다.
user@debian:~$ netstat -4 -l --tcp -p # Show programs listening to IPv4/TCP ports
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:53 *:* LISTEN 2389/named
tcp 0 0 *:22 *:* LISTEN 2936/sshd
tcp 0 0 *:5432 *:* LISTEN 2475/postgres
tcp 0 0 *:25 *:* LISTEN 2961/exim4
여기서는 DNS, SSH, PosgtreSQL 및 Mail 데몬이 해당 포트에서 수신 대기 중이기 때문에 시작되는 것을 볼 수 있습니다. 또한 마지막 열은 각 특정 포트에서 어떤 애플리케이션이 수신 대기 중인지 알려줍니다.
단일 서비스를 확인하는 스크립트는 다음과 같습니다.
PORT=... the port we need to check ...
# Current time in seconds + 15 minutes
TRYUNTIL=$(( $(date +%s) - (60*15) ))
# 0 is down, 1 is up
STATUS=0
# While the service is still down and the current time is before our limit
while [[ (( $STATUS = 0 )) && (( $(date +%s) < $TRYUNTIL )) ]]
do
STATUS=$(netstat -4 -l --tcp | grep "*:$PORT" | wc -l)
# Lets not overload the system with constant checking,
# if the service is still down
if [[ $STATUS = 0 ]]; then
sleep 5s
fi
done