Cron 작업 결과가 자체 셸에서 실행하는 것과 다름

Cron 작업 결과가 자체 셸에서 실행하는 것과 다름

저는 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

관련 정보