
그래서 우리는 파일에 데이터를 추가하는 이 스크립트를 실행하고 스크립트가 이미 실행 중인지 확인하기 위해 무언가를 추가하려고 합니다. 그렇다면 일시 중지하고 20초 후에 다시 확인하여 실행되지 않을 때까지 반복하고 싶습니다. 어느 시점에서 스크립트의 나머지 부분으로 진행하고 싶습니다. 따라서 계속 진행해도 괜찮을 때까지 계속 확인하는 방법을 알아야 합니다. 누구든지 아이디어가 있나요?
if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
then
echo "already running"
sleep 20s
else
echo "ok"
fi
}```
답변1
일종의 잠금 장치를 사용합니다.
가장 간단한 방법은 잠금 파일입니다. 이를 관리해 주는 몇 가지 패키지가 있습니다. 당신은 당신의 플랫폼이나 배포판이 무엇인지 말하지 않았기 때문에 그것에 대해 매우 정확할 수는 없지만 그 중 하나는 프로그램 procmail
과 함께 제공되는 패키지 입니다 lockfile
.
스크립트에서 다음과 같이 사용합니다.
LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK
하나의 인스턴스가 충돌하는 경우 무한정 멈추는 것을 방지하기 위해 수행할 수 있는 개선 사항이 있습니다. 이에 대한 맨페이지를 읽을 수 있습니다: man 1 lockfile
. 또는 직접 구현할 수도 있습니다. 사소하지만 실제 프로그래밍 언어(셸 스크립트가 아님)가 필요합니다.
또 다른 더 정교한(그러나 더 복잡한) 아이디어는 POSIX 세마포어를 사용하는 것입니다. 노력하다 man 7 sem_overview
.