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