나는 내 질문에 대한 답을 찾는 데 운이 별로 없었지만, 어쩌면 내가 그것을 올바르게 묻고 있지 않은 것일 수도 있습니다.
다음과 같은 시작 프로세스가 있습니다.
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
핑이 계속되면 스크립트가 제대로 작동하는 것입니다.