프로세스가 존재하지 않는 경우 명령 실행을 방지하는 방법

프로세스가 존재하지 않는 경우 명령 실행을 방지하는 방법

Korn 쉘 스크립트에서 expdp를 실행하고 있습니다. 재사용이 가능하도록 스크립트를 설정했기 때문에 나중에 프로세스가 실패하면 완료된 단계를 실행하지 않고도 다시 실행할 수 있습니다. 저는 백그라운드에서 두 개의 프로세스를 실행하고 있으며 스크립트를 계속 진행하기 전에 두 프로세스가 모두 완료될 때까지 기다리고 있습니다. 예를 들어 다음 논리를 사용하여 기다립니다. expdp 프로세스가 완료된 후 로그 기능을 사용하여 완료된 메시지를 작성합니다.

while   ps | grep "expdp" | grep -v grep
do
    echo expdp is still in the ps output. Must still be running.
    sleep 5
done

WriteLog "Completed exporting client schemas"

expdp 프로세스가 존재하지 않는 경우에만 로그 쓰기가 발생하도록 위치를 설정하려면 어떻게 해야 합니까(예: expdp 이후에 발생하는 오류를 수정한 후 스크립트를 재사용함). ps에서 프로세스를 찾을 수 없으면 로그를 다시 작성하면 안 됩니다.

답변1

나는 당신이 잘못된 방법으로 검색하고 있다고 생각합니다. 나는 다음과 같은 스크립트를 작성합니다:

if [ "z$STEP5" != "zOK" ] ; then
    expdp -your_options > $logfile &
    while ps ax | grep [e]xpdp ; do
        echo "expdp still in progress..."
        sleep 5
    done
    wait # in order to be sure there is no more background processes...
    tail -n1 $logfile | grep "successfully without warnings" >/dev/null 2>&1
    if [ $? -ne 0 ] ; then 
        echo "Some errors occured while export"
    else
        echo "Export done sucessfully"
    fi
fi

관련 정보