나는 백그라운드에서 무한대로 실행되는 bash 스크립트에서 동일한 스크립트를 다시 실행하여 종료됩니다. 그것은 일종의 스위치입니다.이 스크립트를 호출 할 때 이미 실행 중이면 함수가 시작되거나 종료됩니다. 이렇게하려면 PID 파일을 사용합니다.PID 파일 잠그기
이제 여러 인스턴스가 실행되고 경쟁 조건이 발생하지 않도록하고 싶습니다. 그러나, 나는 다시 PID를 파일로 재 작성하는 스크립트를 실행 PID를 파일하지만, 모든 시간에 대한 잠금을 가지고 이렇게
#!/bin/bash
background_function() {
...
}
exec 200>myscript.pid
if flock -n 200
then
background_function &
echo $! > myscript.pid
else
kill $(cat myscript.pid) && rm myscript.pid
fi
: 나는 무리를 사용하려하고 나는이 방법으로 위의 코드를 재 작성 exec 200>myscript.pid
그리고 이미 실행중인 인스턴스의 PID를 검색하고 죽일 수 없습니다.
어떻게해야합니까? 두 개의 서로 다른 파일 (pid 파일과 잠금 파일)을 사용해야합니까? 아니면 mkdir을 사용하여 다른 잠금 메커니즘을 구현하고 touch하는 것이 더 좋을까요? 감사. echo $$
당신을 위해 충분히 원자 인 경우
그것은 흥미로운 접근 방식이다 그리고 그것은 나를 위해 작동합니다. 유일한 까다로운 부분은 백그라운드에서 프로세스의 올바른 PID로 PID 파일을 다시 쓰는 것입니다 ('background_function &; echo $!> lock.pid'). 고맙습니다! –