2013-08-15 6 views
2

Lustre 파일 시스템을 사용하는 RHEL5 클러스터에서 매우 큰 일괄 처리 작업을 실행하려고합니다. 나는 대략 1 %의 일자리를 가진 이상한 오류를 겪고있었습니다. 그들은 모두 조종을 위해 사용하는 텍스트 파일을 찾을 수 없었습니다. 충분히 이상한제출 된 작업의 일부에서 파일을 찾을 수 없습니다.

cat: batch/fits/fit-paths.txt: No such file or directory 

을하지만 낯선 사람을 가져옵니다

#!/usr/bin/env bash 

#PBS -t 1-18792 
#PBS -l mem=4gb,walltime=30:00 
#PBS -l nodes=1:ppn=1 
#PBS -q hep 
#PBS -o output/fit/out.txt 
#PBS -e output/fit/error.txt 

cd $PBS_O_WORKDIR 
mkdir -p output/fit 
echo 'submitted from: ' $PBS_O_WORKDIR 

files=($(ls ./*.txt | sort)) # <-- NOTE THIS LINE 

cat batch/fits/fit-paths.txt 

은 작업의 일부 작은 부분의 경우, 오류 스트림 출력을 보여 것 : 오류를 재현하는 스크립트는 다음과 같습니다.


내가

files=($(ls batch/fits/*.txt | sort)) 
작업이 오류없이 실행

files=($(ls ./*.txt | sort)) 줄을 변경 ! 말할 필요도없이, 이것은 만족스럽지 않습니다. 나는 흑 마술에 의존하고 싶지 않습니다. (블랙 마술 보다 아니요 마술).

여기에 무슨 일이 일어나고 있는지 아십니까?

+1

가장 좋은 방법은 디버깅을 추가하는 것입니다.'ls -l batch/fits/*'또는 이와 유사한 방법으로 해당 디렉토리가 무엇인지 확인하십시오. 어쩌면 타임 스탬프로 그 정보를 감쌀 수도있다. (동적으로 생성 된이 파일들이 타이밍 문제 일 수 있는가?)'sleep x'를 추가하여 테스트가 문제를 줄이거 나 없애는 지 확인한다. 행운을 빕니다! – shellter

+0

어떻게 든'ls batch/fits /'를 추가하는 것이 문제를 제거한 것처럼 보입니다 ... 매우 이상하고 만족스럽지 않습니다. – Shep

+1

이것이 광채 파일 시스템에 액세스하는 스크립트의 첫 번째 라인입니까, 아니면 네트워크에 마운트 된 다른 위치입니까? – dbeer

답변

0

files=(./*.txt) 

일반적으로

files=($(ls ./*.txt | sort)) 

교체 시도 쉘 자동 글롭 결과를 정렬하고 - 대조 LS 이동용 쉘에서 수행해서는 안 (1) 출력을 파싱 스크립트 - 특수 문자의 인용을 올바르게 처리합니다.

특정 셸 메타 문자가있는 파일이있는 경우에만 문제가 될 수 있습니다. 여기서 후보자는 스페이스, 탭, 줄 바꿈 및 캐리지 리턴입니다.