2010-06-04 2 views
2

심볼릭 링크 일 때 디렉토리에서 데이터를로드하는 데몬이 있습니다. 주기적으로 새 데이터가 생성되고 심볼릭 링크가 업데이트됩니다. 현재의 심볼릭 링크가 이전의 심볼릭 링크와 동일한 지 (데몬이 시작되었는지) 확인하고 그렇지 않은 경우 데몬을 다시 시작하는지 확인하는 bash 스크립트가 필요합니다. 나의 현재의 생각은 다음과 같습니다심볼릭 링크가 변경되었는지 확인하십시오.

if [[ ! -e $old_dir || $(readlink "$data_dir") == $(readlink "$old_dir") ]]; 
then 
    echo restart 
    ... 
    ln "$(readlink "$data_dir")" "$old_dir" -sf 
else 
    echo no restart 
fi 

추상 요구 사항은 다음과 같습니다 스크립트가 실행될 때마다, 그것은 주어진 경로에 대한 심볼릭 링크가 지금은 마지막 시간보다 다른 무언가를 가리키는 지 확인해야하며 만약 그렇다면 뭔가해라. (대체 경로의 데이터가 변경되었는지 확인하는 것입니다하지만 난 어떤 청소기되는 것을 볼 수 없습니다.) 내 질문 :

  • 이 좋은 방법인가?
  • 누구에게 더 좋은 아이디어가 있습니까?
  • $old_dir은 무엇을 사용해야합니까? 심볼릭 링크는 어디에 두어야합니까?
+0

왜이 작업을 수행 하시겠습니까? symlink 뒤에있는 아이디어는 최종 목적지를 추적 할 필요가 없다는 것입니다. '[[]] 안에는 큰 따옴표를 사용할 필요가 없지만'ln' 명령과 함께 사용하는 것이 좋습니다. 백틱 대신'$()'를 사용하는 것이 바람직합니다. '[[]]'를 사용할 때는 -ne 대신'! ='를 사용해야합니다. –

+0

@Dennis, 수정하여 제안 된 변경 사항을 적용했습니다. – BCS

답변

1

좋은 접근 방법은 확실하지 않습니다. 충분히 실행할 수 있지만 이상한 것 같습니다. 잘못된 경로 아래로 당신을 선도하고, 어떻게 든이 작업을 수행하는 올바른 방법을 사용하는 것입니다 생각한다면 진정으로 알고 충분히 보지 않고 :

난의/var/지역/프로젝트 이름

편집에 old_dir 넣어 것 스풀링 디렉토리. 이 작품

방법은 다음과 같습니다

  1. 새로운 작업 파일은/var/스풀/APPNAME/tmp 디렉토리에 생성됩니다.
  2. 파일 (동일한 파일 시스템이 필요) (즉, 더 적절한 경우 또는 이동)
  3. 파일 인/var/스풀/APPNAME로부터 픽업 처리, 삭제 도착
은/var/스풀/APPNAME 이동 도착

2 단계는 아토믹 핸드 오프입니다. 3 단계는 장갑을 착용해야하므로 동일한 파일을 두 번 처리하면 무해합니다.

다시 말하지만, 여기에 완전한 기록을 유지하는 것과 같은 심볼릭 링크가 있으면 심볼릭 링크가 현재를 참조합니다.

+0

당신은 그 곳에서 무엇을 할 것입니까? (나는 추상적 인 요구 사항을 추가했다.) – BCS

+0

이것은 일괄 처리 시스템이 아니며 서버이기 때문에 마지막 비트가 목표이다. – BCS

0

스크립트는 원본 $old_dir이 무엇인지 알아야합니다. 값을 예를 들어 /var/run/app_name의 파일에 저장할 수 있습니다.

왜 이렇게하고 싶은지 아직 확실하지 않습니다. 죄송합니다.

편집 : 파일 시스템 계층 구조 표준을 기반으로

, 내가 /var/lib/appname 당신의 심볼릭 링크를 넣어 적절한 장소가 될 수 있음을 말할 것입니다.

+0

'$ old_dir'을 하드 코딩 할 계획입니다. – BCS

+0

@BCS : 그렇다면 "$ old_dir"은 어디에 넣어야합니까? " –

+0

요즘에는 부팅 할 때마다/var/run/appname이 다시 만들어집니다. – Joshua

관련 문제