지속적으로 실행되는 프로세스의 표준 출력을 제한합니다.

지속적으로 실행되는 프로세스의 표준 출력을 제한합니다.

나는 내 질문에 대한 답을 찾는 데 운이 별로 없었지만, 어쩌면 내가 그것을 올바르게 묻고 있지 않은 것일 수도 있습니다.

다음과 같은 시작 프로세스가 있습니다.

nohup ping 127.0.0.1 > log.txt >2>&1 &

모든 표준 출력을 log.txt로 보내는 매우 간단한 명령입니다. 유일한 문제는 내가 실행 중인 명령이 n초마다 log.txt에 데이터를 전송한다는 것입니다. log.txt 파일을 추가하여 드라이브를 가득 채울 위험이 있는 대신 log.txt 파일에 한 줄을 출력하고 싶습니다.

log.txt에 한 줄만 출력하고 계속 덮어쓰게 하는 방법이 있습니까?

답변1

다음은 로그 파일의 마지막 출력 줄만 유지하는 빠르고 더러운 솔루션입니다.

ping localhost | 
  while IFS= read -r line; do 
    printf '%s\n' "$line" > log.txt; 
  done

이제 읽기 위해 파일에 액세스하려고 할 때 다양한 경쟁 조건이 발생할 수 있습니다. 상호 액세스를 방지하기 위해 파일을 "잠그는" 것이 도움이 될 수 있습니다. stackoverflow에서 이 질문을 잠그는 방법에 대한 자세한 정보가 좋은 시작일 수 있습니다.여러 스크립트에서 bash의 파일에 대한 액세스를 동기화(잠금/잠금 해제)하는 방법은 무엇입니까?

답변2

이 스크립트를 사용해 보세요. 저에게 효과적이었습니다.

% nohup ping 127.0.0.1 > log.txt >&1&

다음을 입력하여 프로세스가 실행 중인지 확인합니다.

% ps ax | grep ping

프로세스가 실행 중인 경우:

% tail -f log.txt

핑이 계속되면 스크립트가 제대로 작동하는 것입니다.

관련 정보