exec
명령을 사용하여 STDOUT
및 STDERR
을 파일로 리디렉션하는 스크립트가 있습니다. 이 스크립트는 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
답장을 보내 주셔서 감사합니다. 그것이 제가 한 첫 번째 일이었습니다. 확실히 설정되어 있습니다. – Hameed
OK : Solaris 10에서'$ LOCLOG'의 값에 대한 특이 사항이 있습니까? 각 시스템에서'$ LOCLOG'의 값은 무엇입니까? '$ LOCLOG' 디렉토리에 대한 사용 권한의 차이점은 무엇입니까? '$ LOCLOG'가 Solaris 10에서는 파일이지만 Solaris 9에서는 디렉토리가 될 위험이 있습니까? 어떤 사용자가이 스크립트를 실행하고 있습니까? NFS 마운트 된 파일 시스템이 사용자에게'root' 슬픔을 안겨줄 수 있습니까? –
해당 사항 없음. 내가 실행 한 다른 프로그램은 액세스 및 쓰기에 아무런 문제가 없습니다. 사용자가 로그인 할 때 LOCLOG의 값은 매일 바뀝니다 :'/ home/hameed/test/local/etc/log/0508' – Hameed