충돌이 발생하는 테스트 실행이 있습니다. 충돌하기 전에 얼마나 멀리 갔는지 알아내야 해요. 충돌 후 다시 재부팅되고 로그 파일이 지워집니다. 하지만 이 닦는 데는 10분이 걸립니다. 따라서 9분마다 로그 파일을 저장하면 로그 파일을 얻을 수 있습니다.
문제는 로그 파일을 특정 위치에 복사하고 복사된 파일이 대상 파일보다 큰 경우 기존 파일(있는 경우)만 덮어쓰는 bash 스크립트를 작성하는 방법입니다. 그렇지 않으면 내버려두고 싶습니다.
25 if [ -f $testFile ]; then
26 COUNT=`cat $testFile|wc -l`
27 if [ $COUNT -gt 0 ];then
28 ARGS=`head -1 $testFile`
29 echo "Executing test for ARGS"
30 sed -i '1d' $testFile
31 cd /testCode; sleep 600
이 시점에서 코드는 앞서 언급한 대로 10분 동안 대기 상태가 됩니다.
32 /testCode/startTest.sh $ARGS
그러면 로그 파일 삭제 테스트가 시작됩니다. 테스트가 충돌하지 않으면 테스트가 완료되면 다음 명령으로 이동합니다. 그렇지 않으면 맨 위에서 다시 시작하세요.
33 `wall "System is going down for reboot in 600 seconds. Please save your work"`
34 sleep 600
35 /sbin/reboot &
36 exit 0
37 fi
38 fi
업데이트 #1
나는 방법을 알아냈다. 그래서 테스트가 시작되면 마지막 실행 로그를 저장합니다. 그런 다음 다시 시작을 테스트하는 동안 로그를 확인할 시간이 충분합니다. 테스트는 일반적으로 한 시간 정도 후에 세그폴트로 인해 충돌이 발생합니다. 이렇게 하면 로그를 확인할 수 있는 충분한 시간이 생깁니다.
이것은 실제로 깨끗한 접근 방식은 아니지만 작동할 것입니다. @Alexandre Alves도 훌륭한 답변을 제공했습니다. 그것도 괜찮습니다. @Slm은 훌륭한 답변을 제공했지만 불행히도 로그 파일이 복잡해지기 때문에 나와 같은 대규모 테스트에서는 작동하지 않습니다.
또한 내 문제는 로깅 자체가 아니라 로그 파일을 저장하는 것입니다.
답변1
테스트가 충돌하기 시작하는 줄에서 디버깅을 켭니다. 아래 설명된 기술 중 하나를 사용할 수 있습니다.
호출 스크립트에서 전체 스크립트 디버깅
bash -x /testCode/startTest.sh $ARGS
스크립트 자체 디버그
또는 이 스크립트를 제어할 수 있는 경우 다음과 같이 상단에 shebang 줄을 추가할 수 있습니다.
#!/bin/bash -x
코드의 특정 부분 디버깅
또는 더 자세한 내용이 필요한 스크립트 부분에서 이 작업을 수행할 수 있습니다.
line1 line2 set -x line3 line4 set +x line5
답변2
테스트 로그 파일 방식을 변경할 수 없는 것 같습니다.
하지만 저는 두 가지 방법을 제안할 수 있습니다.
정말로 bash 스크립트를 원한다면
#!/bin/bash source_size=`du -b file1|cut -f 1` destin_size=`du -b file2|cut -f 1` if [ $source_size -gt $destin_size ]; then mv file1 file1.bck touch file1 cp file1.bck /destination/file2 rm file1.bck fi
참고로 저는 파일을 먼저 이동한 후 복사했습니다. 다른 파일 시스템 간에 파일을 이동하려면 먼저 복사한 다음 삭제해야 하기 때문입니다. 이는 파일이 이동될 때 테스트로 인해 파일을 덮어쓰는 상황이 발생할 수 있음을 의미합니다.
티셔츠 사용
문제가 언제 발생할지 알고 있다면 다음을 수행할 수 있습니다.
tail -f logfile |tee newlog
이는 새 로그 파일을 작성하는 동안 대략적인 로그 파일에 나타납니다.
테스트에서 로그 파일을 생성하는 방식을 변경하여 로그 파일 순환을 수행합니다.