2013-05-06 1 views
1

exec 명령을 사용하여 STDOUTSTDERR을 파일로 리디렉션하는 스크립트가 있습니다. 이 스크립트는 Solaris 9에서 잘 작동합니다. VMware의 Solaris 10에서 테스트 중이며 exec 명령에서 실패합니다.쉘 스크립트의 STDOUT 및 STDERR 리디렉션

prog=`basename $0` 
log="${LOCLOG}/${prog}$$" 

if test -z "$LDDEBUG" 
then 
    exec > ${log} 2>&1 

    chmod 644 "${log}" 
else 
    set -x 
fi 

위의 경우 오류 메시지없이 해당 줄에서 스크립트가 끝납니다.

변수 exec > "${log}" 2>&1 주위에 따옴표를 추가했습니다. 이렇게하면 스크립트가 끝까지 실행되지만 로그 파일은 생성되지 않습니다.

exec > /tmp/blahblah1 2>&1 

을 ... 그리고 그것은 일 :

나는 다음 파일 경로를 시도했다. 그것은 파일을 생성하고 그것에 썼다. 그러나 로그 파일 이름을 스크립트에서 생성해야하기 때문에 내 문제가 해결되지 않습니다.

여기 해결책을 찾지 못했지만 매우 간단하다는 것을 알았지 만 스크립트를 크게 변경하지 않고도 할 일이 없다고 생각합니다.

====== sh -x

[email protected][60] sh -x /home/hameed/test/local/bin/qikload 
+ basename /home/hameed/test/local/bin/qikload 
prog=qikload 
datefmt=+%H:%M:%S 
dayfmt=+%y%m%d 
log=/home/hameed/test/local/etc/log/0508/qikload2199 
+ test -z 
+ exec 

=======의 출력

는 다음 나는 2>&1을 제거하고 sh -x를 실행하며 그 라인을 통과했다. 실패의

+ basename /home/hameed/test/local/bin/qikload 
prog=qikload 
datefmt=+%H:%M:%S 
dayfmt=+%y%m%d 
log=/home/hameed/test/local/etc/log/0508/qikload27213 
+ test -z 
+ exec 
+ chmod 644 /home/hameed/test/local/etc/log/0508/qikload27213 
+ date +%H:%M:%S 
now=10:44:23 
+ echo Log: 10:44:23 Commencing loads 

답변

1

한 매우 그럴듯한 원인은 $LOCLOG는 VM웨어에서 Solaris 10에서 설정 해제 (그러나 솔라리스 9에 설정되어있는) 것을, 그래서 스크립트는 루트 디렉토리에 쓰기를 시도하는 (그러나 실패)입니다.

$LOCLOG이 설정되어 있는지 확인하여 확인할 수 있습니다 (예 : echo LOCLOG="$LOCLOG" 리디렉션 없음).

+0

답장을 보내 주셔서 감사합니다. 그것이 제가 한 첫 번째 일이었습니다. 확실히 설정되어 있습니다. – Hameed

+1

OK : Solaris 10에서'$ LOCLOG'의 값에 대한 특이 사항이 있습니까? 각 시스템에서'$ LOCLOG'의 값은 무엇입니까? '$ LOCLOG' 디렉토리에 대한 사용 권한의 차이점은 무엇입니까? '$ LOCLOG'가 Solaris 10에서는 파일이지만 Solaris 9에서는 디렉토리가 될 위험이 있습니까? 어떤 사용자가이 스크립트를 실행하고 있습니까? NFS 마운트 된 파일 시스템이 사용자에게'root' 슬픔을 안겨줄 수 있습니까? –

+0

해당 사항 없음. 내가 실행 한 다른 프로그램은 액세스 및 쓰기에 아무런 문제가 없습니다. 사용자가 로그인 할 때 LOCLOG의 값은 매일 바뀝니다 :'/ home/hameed/test/local/etc/log/0508' – Hameed