手動で実行すると正常に動作しますが、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を実行するときにユーザー入力を要求する行がありました。私はユーザーが入力した要求が不要だったので、それを削除してこの問題を解決しました。