stderr(파일 이름이 아니라 로그 파일 내부)에 날짜를 어떻게 추가합니까?

stderr(파일 이름이 아니라 로그 파일 내부)에 날짜를 어떻게 추가합니까?

항목이 있습니다 crontab:
00 10 * * * test.sh>>output_log 2>>error_log

그러나 나는 또한 매일의 시작 행에 날짜를 포함시키고 싶습니다 output_log.error_log

이 목표를 어떻게 달성할 수 있나요?

나는 시도했다:

{ echo `date` && . test.sh; }>>output_log 2>>error_log

echo date그러나 날짜는 고려되지 않으므로 output_log에만 포함 stderr됩니다 2.

나는 다음과 같은 의사코드를 원합니다:

{ echo `date` && . test.sh }>>output_log { echo `date` plus 2's content } >>error_log  

답변1

제일 쉬운:

0 10 * * * { date; date >&2; test.sh; } >> output_log 2>> error_log

ts각 줄 앞에 타임스탬프를 추가하는 Moreutils의 유틸리티를 사용하는 것도 흥미로울 수 있습니다.

SHELL=/bin/bash
0 10 * * * test.sh > >(ts >> output_log) 2> >(ts >> error_log)

/bin/bash( 기본 POSIX는 리디렉션 구성을 /bin/sh지원하지 않으므로 이 사용법에 주의하십시오 .)>()

답변2

내 생각에 다음과 같이 경로를 변경하면 crontab원하는 것을 얻을 수 있을 것입니다. 또는 적어도 내가 원하는 것을 얻을 수 있을 것입니다.생각하다당신이 원하는. 뜻대로 되지 않으면 댓글을 남겨주세요. 목표를 명확히 하기 위해 질문을 편집할 수도 있습니다.

crontab테스트/평가를 위한 프로토타입 항목:

* * * * * { cat hellofile_NOFILE.txt ; echo $(date) | tee -a error_log; } >> /home/pi/output_log 2>>/home/pi/error_log

저는 귀하의 스크립트가 없어서 test.sh그것을 사용했습니다 cat file. 에서 오류를 생성하려면 cat존재하지 않는 파일을 가리키기만 하면 됩니다. 일부 출력을 보내 해당 파일이 stderr해당 파일로 이동하는지 확인합니다 error_log.

error_log합계에 날짜 타임스탬프를 원합니다 output_log. 파이핑 date대상은 tee -a error_log오류 로그에 타임스탬프를 기록해야 합니다.

(또는 귀하의 경우에는 ) 불가능 하더라도 날짜 타임 스탬프를 원한다고 생각했기 &&때문에 교체했습니다 .;cattest.sh

나는 이것이 귀하의 질문과 정확히 일치하지 않는다는 것을 알고 있습니다. 나는 당신이 논리를 테스트할 수 있도록 이것을 가져옵니다. 논리가 정확하다면 다음과 같이 귀하의 사례로 "번역"된다고 생각합니다.

수정된 crontab항목:

00 10 * * * { test.sh ; echo $(date) | tee -a error_log; } >> output_log 2>> error_log

관련 정보