제 요구 사항은 cron 작업의 쉘 스크립트를 사용하여 지속적으로 업데이트되는 큰 파일을 읽는 것입니다. 마지막으로 사용 가능한 줄까지 읽은 다음 프로세스를 중지합니다. 다음에 cron 작업이 시작되면 작업은 마지막으로 완료된 위치에서 읽어야합니다. 어떤 제안 쉘 스크립트에서 어떻게 할 수 있습니다.쉘 스크립트를 사용하여 마지막 위치에서 파일을 읽으십시오.
Solaris Unix를 사용하고 있습니다.
제 요구 사항은 cron 작업의 쉘 스크립트를 사용하여 지속적으로 업데이트되는 큰 파일을 읽는 것입니다. 마지막으로 사용 가능한 줄까지 읽은 다음 프로세스를 중지합니다. 다음에 cron 작업이 시작되면 작업은 마지막으로 완료된 위치에서 읽어야합니다. 어떤 제안 쉘 스크립트에서 어떻게 할 수 있습니다.쉘 스크립트를 사용하여 마지막 위치에서 파일을 읽으십시오.
Solaris Unix를 사용하고 있습니다.
이미 표시된 가장 좋은 방법은 "꼬리 -f"를 사용하는 것입니다,하지만 프로그램이 사망 어떤 이유로, 당신은 처음부터 읽기 시작해야한다는 것을 가정하고 계속하려면 "꼬리 -f"를 사용할 수없는 어디에서 멈췄다.
그래서 유일한 방법은 자신의 C 응용 프로그램을 작성하는 것입니다. 오히려 간단하기 때문에 충분히 쉬워야합니다. "ftell"을 사용하여 데이터 파일의 현재 위치를 확인할 수 있습니다. 그런 다음 응용 프로그램을 종료하기 전에 또는 모든 읽기 후에 결과를 다른 파일 (제어 파일)에 기록합니다 (다시 행을 다시 처리하지 않도록하는 것이 중요 할 경우).
응용 프로그램을 다시 시작하면, 당신은 그 제어 파일을 읽은 값을 구문 분석하고 중단 한 부분 점프 "fseek과"을 사용합니다. 데이터 파일이 다른 응용 프로그램에 의해 잘립니다
경우, 당신은 또한 당신의 제어 파일을 제거하는 응용 프로그램을 얻어야한다. 그렇지 않으면 파일이 새로운 것임을 알 수있는 다른 방법을 찾아야합니다. 당신이 읽는 "fseek"가 현재의 "ftell"보다 더 큰 파일 일 수도 있습니다. 이것은 파일이 그보다 작다는 것을 나타낼 지 모르지만 그것은 모든 우발적 사건을 다루지는 않습니다.
"fstat"를 조사하고 데이터 파일의 생성 시간을 사용하여 제어 파일 또는에 저장했을 때의 생성 시간보다 새로운 지 확인할 수 있습니다. 가능한 경우 날짜/파일의 첫 번째 줄에 타임 스탬프를 추가하고 제어 파일에도이 스탬프를 씁니다. 응용 프로그램이 다시 시작되면 첫 번째 줄의 타임 스탬프가 제어 파일의 타임 스탬프와 일치하지 않으면 처음부터 읽습니다. 그렇지 않으면 "fseek"가 올바른 위치로 이동해야합니다.
은 (크론에 추가 물론)이 같은 시도 :
#!/bin/bash
#STAT_FILE=/tmp/stat.tmp
PREV_LINE_STAT=/tmp/prev_last_line.tmp
LINE=$(cat log | wc -l)
LOG=/tmp/log.tmp
if [ -f $PREV_LINE_STAT ]
then
PREV_LINE=$(cat $PREV_LINE_STAT)
else
PREV_LINE=0
fi
declare -i LINE_RANGE
LINE_RANGE=$LINE-$PREV_LINE
if [ $LINE_RANGE -lt 0 ]
then
LINE_RANGE=$LINE
fi
tail -n $LINE_RANGE log > $LOG
COUNT1=$(grep any_word $LOG |wc -l)
echo "-------------------
LINE_RANGE is $LINE_RANGE
-------------------
number of words
$COUNT1" > test.txt
echo $LINE > $PREV_LINE_STAT
cat test.txt
그래서 "꼬리"기본 도구가있다. 질문이 있으시면 저에게 물어보십시오.
'tail -n'은 파일을 처음부터 읽을 것을 요구합니다; 파일이 크기 때문에 시간이 오래 걸릴 수 있습니다. 따라서'tail -c' (Barmar가 위에 제안한대로)가 더 좋을 수 있습니다. – Armali
이전 파일 크기를 저장하고'tail -c + $ filesize logfile'을 사용하십시오. – Barmar
왜 'cron'으로 복잡한 일이 생길까요? 프로세스를 시작하고 파일의 끝까지 읽은 다음 일정 시간 동안 잠자기 (파일을 열린 상태로 유지)하십시오. 깨어 났을 때 파일 위치에서 더 많은 데이터를 읽습니다. 파일 위치는 잠자기 시점이었습니다. –
또는''read, sleep ''사이클을 자동화하는 파이프'tail -f'. – Barmar