-2 PID를 종료하고 프로세스를 다시 시작하는 스크립트

-2 PID를 종료하고 프로세스를 다시 시작하는 스크립트

"restart.sh" 스크립트를 실행하는 데 문제가 있습니다. 주요 목표는 ID로 프로세스를 종료한 다음 프로세스를 다시 시작하는 것입니다.

프로세스 이름에는 아래와 같이 "DND"가 있습니다.

$ ps -ef | grep DND
root   18425     1 60 11:53 pts/0    00:40:34 java -jar DND_Retry.xml

참고: PID는 스크립트가 실행될 때마다 변경됩니다.

1 스크립트의 일부는 다음과 같습니다.

  echo "Killing BND Process"

pids=$(pgrep -f BND)
for pid in "${pids}"; do
  if [[ $pid != $$ ]]; then
    kill -2 "$pid"
  fi
done

sleep 2

while true
do
shut1=`more /Data/v3/nohup_bnd.out |  grep  "has been shutdown" | wc -l`
        if [ $shut1 -eq 1 ]; then

    echo "process ended now restart"

문제는 스크립트가 처음에는 성공적으로 실행되지만 다시 실행하면 프로세스가 종료되지 않는다는 것입니다. 그러나 Kill -9를 사용하여 프로세스를 수동으로 종료한 다음 스크립트를 다시 실행하면 성공적으로 실행되어 원하는 결과가 생성됩니다.

위 스크립트/조건에서 수정해야 할 사항이 있나요? Kill -2를 수행해야 합니다.

답변1

여러 PID를 실행 중인 경우 인용된 변수로 "${pids}"인해 문제가 발생할 수 있습니다. 따옴표를 제거해야 합니다.

예:

$ pids=$(pgrep -f a_program_started_three_times)
$ for pid in "$pids"; do echo "pid is $pid"; done
pid is 563
564
565
$ for pid in $pids; do echo "pid is $pid"; done
pid is 563
pid is 564
pid is 565

임의로 선택할 수 있는:

for 루프에 추가 검사를 추가하겠습니다.

pids=$(pgrep -f BND)
# if pid(s) were found, then...
if [ $? -eq 0 ]; then
    # removed the quotes from "${pids}" here
    for pid in $pids; do
        if [[ $pid != $$ ]]; then
            kill -2 "$pid"
        fi
    done
fi

관련 정보