Cron 작업이 오류 로그에 오류를 쓰고 있지만 출력 로그 파일에 출력을 쓸 수는 없습니다.

Cron 작업이 오류 로그에 오류를 쓰고 있지만 출력 로그 파일에 출력을 쓸 수는 없습니다.

2개의 Python 코드가 있고 cron을 사용하여 예약합니다. 내 코드는 실제로 매일 오전 10시 30분부터 오후 4시 20분까지 실행됩니다. 내 코드는 오전 10시 30분부터 오전 11시까지 분당 2-3줄을 출력한 다음 분당 30-40줄을 출력하기 시작합니다. 저는 이렇게 코드를 정리했습니다.

30 10  * * 1-5 cd /home/alpha/IBpy && python LongData.py >> /home/alpha/logs/Longdata.op 2>> /home/alpha/logs/Longdata.er
31 10  * * 1-5 cd /home/alpha/IBpy && python ShortData.py >> /home/alpha/logs/Shortdata.op 2>> /home/alpha/logs/Shortdata.er

이제 문제는 내 프로그램이 잘 돌아가고 있고 해야 할 일을 모두 하고 있다는 것입니다. 오류가 발생하면 즉시 오류 로그 파일에 오류를 기록하지만 출력 파일에는 한 줄도 쓰지 않습니다. 나는 여기와 stackoverflow에서 나에게 도움이 될 만한 거의 모든 게시물을 확인했지만 불행히도 그 중 어느 것도 나에게 도움이 되지 않았습니다. 그러나 동일한 프로그램을 10시 30분 대신 오전 11시(프로그램이 30-40행 출력을 시작할 때)에 시작하면 모든 것이 잘 작동합니다. 나는 정말로 내가 무엇을 잘못했는지 모르겠습니다. 11시에 계획을 시작하면 안 돼요. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

stdout의 데이터가 버퍼링되어 있기 때문에 이 문제가 발생한 것 같습니다. ~에 따르면이것게시글 방금 cron 작업을 다음으로 변경했습니다.

31 10  * * 1-5 cd /home/alpha/IBpy && stdbuf -i0 -o0 -e0 python ShortData.py >> /home/alpha/logs/Shortdata.op 2>> /home/alpha/logs/Shortdata.er

이제 모든 것이 잘 작동하고 있습니다.

답변2

구문이 작동해야 합니다 (ba)sh. 올바른 구문은 시스템의 기본 쉘에 대한 설명서를 확인하세요. 쉘마다 리디렉션에 대한 지원이 다릅니다. 예를 들어 로 csh리디렉션할 수 없습니다 .stderrstdout

그렇지 않은 경우 Python 스크립트 자체의 버그라고 말하고 싶습니다. Python 스크립트에서 시간/날짜를 확인하는 경우 올바른 시간 형식을 얻었는지 확인하세요.

관련 정보