스크립트를 종료하기 전에 미리 정의된 시간 동안 기다립니다.

스크립트를 종료하기 전에 미리 정의된 시간 동안 기다립니다.

내 Unix 상자에서 프로세스 이름을 사용하여 실행 중인 응용 프로그램 서버가 있습니다 abc_test. 여기에 사용해야 하는 쉘 스크립트가 있습니다 /opt/abc/bin/stop. 이제 가끔 내 서버가 중지되지 않아 내 프로세스가 여전히 실행 중인지 확인해야 합니다. 실행 중인 경우 몇 초 동안 잠자기 상태로 두고 프로세스가 아직 실행 중인지 다시 확인하세요. 프로세스가 5분 후에도 계속 실행 중이면 쉘 스크립트를 성공적으로 종료하고, 프로세스가 실행 중이 아닌 경우에도 쉘 스크립트를 성공적으로 종료하고 싶습니다.

그래서 아래 스크립트를 생각해 냈는데 아래 쉘 스크립트에 이 5분짜리 항목을 어떻게 추가하는지 이해할 수 없습니다. 아래 스크립트가 내가 원하는 것을 정확히 수행합니까? 이 부분도 개선될 수 있을 것 같아요.

#!/bin/bash

/opt/abc/bin/stop

# Wait for 10 second
sleep 10

# Number of seconds to wait
WAIT_SECONDS=300
# Counter to keep count of how many seconds have passed
count=0

while pgrep abc_test > /dev/null
do
    echo "server is still running."
    # Wait for one second
    sleep 1
    # Increment the second counter
    ((count++))
    # Has the process been killed? If so, exit the loop.
    if ! pgrep abc_test > /dev/null ; then
        break
    fi
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $count -gt $WAIT_SECONDS ]; then
        break
    fi  
done

답변1

/opt/abc/bin/stop스크립트가 차단되지 않는다고 가정하면 작동하는 것 같습니다.
~처럼무루$count변수를 건너뛰고 내장된 를 사용하는 것이 좋습니다 $SECONDS. 그러면 다음과 같은 코드가 생성됩니다.

/opt/abc/bin/stop
# Wait for 10 second
sleep 10
# Number of seconds to wait
WAIT_SECONDS=300
while pgrep abc_test > /dev/null
do
    echo "server is still running. Seconds: $SECONDS"
    # Wait for one second
    sleep 1
    # Have we exceeded $WAIT_SECONDS? If so exit the loop
    if [ $SECONDS -gt $WAIT_SECONDS ]; then
        break
    fi
done

차단되는 경우 /opt/abc/bin/stop다음과 같이 백그라운드에서 호출하면 됩니다.

/opt/abc/bin/stop &

관련 정보