저는 Ubuntu 12.0.4를 사용하고 있으며 기본적으로 다음 코드를 포함하는 스크립트가 있습니다.
lockfile=/var/tmp/mylock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
/var/tmp/mylock 파일이 내 시스템에 존재하지 않으므로 스크립트를 수동으로 실행하면 "실행 중인 인스턴스가 없습니다."라는 메시지가 표시됩니다. 이는 올바른 것입니다.
그러나 cron에 의해 쉘 스크립트가 실행되면 항상 "인스턴스가 실행 중입니다"를 반환합니다.
위 문제의 근본 원인을 찾기 위해 어디를 확인해야 할지, 무엇을 찾아야 할지 잘 모르겠습니다. 여기에서 몇 가지 지침을 얻을 수 있기를 바랍니다.
답변1
일반적으로 파일을 생성하고 파일이 존재하는 경우 운영 체제가 파일을 손상시키지 않을 것이라고 기대하는 것은 파일이 존재하는지 테스트하는 좋은 방법이 아닙니다.
당신은 더 나은 서비스를 얻을 것입니다:
if [ -f $lockfile ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi
그러나 파일 존재를 잠금 파일로 사용하려는 경우 unix lockfile 명령을 사용하는 것이 좋습니다.
lockfile -r 0 $lockfile
if [ $? -ne 0 ]; then
exit_normally "instance is running"
else
echo "no instance is running"
fi