Bash 스크립트를 실행할 때 동일한 스크립트가 아직 실행되지 않았는지 어떻게 확인할 수 있나요?

Bash 스크립트를 실행할 때 동일한 스크립트가 아직 실행되지 않았는지 어떻게 확인할 수 있나요?

스크립트의 다른 인스턴스가 이미 실행 중인 경우 스크립트를 종료할 수 있는 방법에 대한 몇 가지 제안 사항을 보았습니다. 내 문제는 그 반대입니다. 동일한 스크립트의 다른 모든 인스턴스(있는 경우)를 모두 종료하고 스크립트를 계속 실행하는 방법을 찾고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?

답변1

PIDS=$(pidof -x nameofyourscript)스크립트를 포함하여 모든 PID(있는 경우)를 얻으려면 다음과 같은 작업을 수행할 수 있습니다 . 그럼 넌 할 수 있어kill $PIDS

편집: 위의 내용은 현재 스크립트도 종료하므로 답변을 수정하여 -o다음과 같은 옵션을 추가하십시오. PIDS=$(pidof -x -o $$ nameofyourscript) 이렇게 -o $$하면 현재 스크립트의 pid가 생략됩니다.

더 좋은 점은 스크립트 이름을 하드코딩하는 대신 다음에서 자체 이름을 가져오는 것입니다 $0.

kill $(pidof -x -o $$ $0)

따라서 스크립트 시작 부분에 배치하고 2>/dev/null다른 인스턴스를 찾을 수 없어 문제가 해결되는 경우에 사용할 수 있습니다.

답변2

스크립트에서:

# store the Process ID here
pidfile=/var/run/mypid.local
# If there's a stored PID, terminate with SIGKILL
[[ -f $pidfile ]] && kill -s 9 $(cat $pidfile)
# Save our PID for the next run to kill
echo "$$" >$pidfile
  

그리고, 당신 앞에서 청소를 하세요 exit.

rm $pidfile

관련 정보