실행중인 프로세스가 있는지 확인하기 위해 프로세스 모니터를 만들었고, 발견되면 해당 프로세스가 허용되는지 아닌지를 확인해야합니다. 기본적으로 보안 검사. 실행중인 프로세스를 찾아보고 예상 한 결과를 얻을 때 유용합니다. 그러나, 프로세스가 발견되지 않을 때 어떤 이유로 나는 "ok"대신에 빈 라인을 뱉어 버릴 것입니다. 나는 변수 rmanRUNNING이 프로세스가 실행되고 있지 않다면 0으로 채워진다는 것을 안다. 그래서 나는 첫 번째 if 문이 왜 다른 곳으로 넘어가는지 확실하지 않다. 그래서 "ok"를 수행한다. "닫으십시오. 어떤 도움 이라든지 대단히 감사 할 것입니다. 아래를 참조하십시오 : 나는 간단한 뭔가가 있어야합니다 bash 프로세스 모니터 스크립트는 프로세스가 발견되지 않을 때 비어 있습니다.
#!/bin/bash
rmanRUNNING=`ps -ef|grep rman|egrep -v grep|wc -l`
if [ "$rmanRUNNING" -gt "0" ]
then
PPIDs=($(ps -oppid= $(pgrep rman)))
kshddPID=($(pgrep -f 'ksh.*/rman_dd.ksh'))
for i in "${PPIDs[@]}"
do
:
for j in "${kshddPID[@]}"
do
:
if [ "$i" == "$j" ]
then
result="ok"
else
result="bad"
break
fi
done
if [ "$result" == "bad" ]
then
break
fi
done
echo "$result"
else
echo "ok"
fi
, 나는 단지 내가이 일을 단순화 경우,이를 분리 할 수없는 것 바로 다음 현재 조건과 가진 경우 다른와 다음 에코 에코, 제대로 작동하는 것 같아요, 그래서 내가 볼 수없는 몇 가지 오류가 발생하는 경우 그것은 메인 내부의 루프와 관련이 있다고 느낍니다. 또는 break가 작동하는 방식에 대한 오해와 관련이 있습니다. 그래서 빈 "result"변수를 echo 한 다음 종료하는 지점으로 나가고 있습니다. 확실하지 않습니다.
미리 감사드립니다.
나는이 문제에 관한 생각하지 않지만,'rmanRunning'에 할당 할 때 왜 'pgrep' 사용하지 않는? – Barmar
'bash -x'를 사용하여 스크립트를 실행하면 실행시 줄이 표시됩니다. 이것은 어디서 잘못 될지 알려줄 것입니다. – Barmar
'$ rmanRunning'이 0보다 큰 경우 빈 출력을 얻지 만'$ kshddPID'는 비어 있습니다. 내부 'for' 루프가 아무 것도하지 않기 때문입니다. – Barmar