내 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 &