수동으로 실행하면 제대로 작동하지만 crontab을 통해 실행하면 실패하는 쉘 스크립트가 있습니다. 스크립트는 기본적으로 다음을 수행합니다.
Python script to get audio data and pipe to stdout | ffmpeg the data from stdin and pipe to stdout | stream the data from stdin
crontab을 통해 실행하면 stdin() 에 데이터가 없다는 메시지가 표시되면서 스트리밍이 실패합니다 ...No (more) data available on standard input
.
내가 찾은이것대답은 crontab의 파일 설명자 문제를 암시하는 것 같지만 문제에 대한 자세한 내용과 최선의 해결 방법을 알고 싶습니다.
편집하다: 각 개별 명령을 개별적으로 시도하여 문제를 해결하면 문제가 Python 스크립트에서 시작되어 다음과 같이 불평하는 것으로 나타났습니다.
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr"
오디오 데이터를 출력하는 대신. 조언을 따르다여기그리고여기(파일 끝에 sys.stdout.flush()를 추가하세요.) 실제 오류 메시지는 다음과 같습니다.
Traceback (most recent call last):
File "/home/*username*/testing.py", line 109, in <module>
sys.stdout.flush()
IOError: [Errno 9] Bad file descriptor
어쩌면 이것은 Python 문제에 더 가깝습니다. 오류로 인해 여전히 stdin/stdout과 관련된 것 같습니다.
답변1
문제는 실제로 Python 파일과 cron에 있었지만 예상했던 대로 파일 설명자(stdin/stdout)에는 없는 것으로 나타났습니다.
반대로,에 따르면이 답변문제를 일으키는 cron을 실행할 때 사용자 입력을 요청하는 줄이 있었습니다. 나는 사용자가 입력한 요청이 불필요했기 때문에 이를 제거하여 이 문제를 해결했습니다.